IT

php 정적 함수

itgroup 2023. 2. 6. 23:25
반응형

php 정적 함수

php의 정적 기능에 대한 질문이 있습니다.

내가 수업이 있다고 가정해 보자.

class test {
    public function sayHi() {
        echo 'hi';
    }
}

내가 하면test::sayHi();문제없이 동작합니다.

class test {
    public static function sayHi() {
        echo 'hi';
    }
}

test::sayHi();동작합니다.

일등석과 이등석의 차이점은 무엇입니까?

정적 기능의 특별한 점은 무엇입니까?

첫 번째 수업에서는sayHi()는 실제로는 스태틱메서드로 호출하고 있는 인스턴스 메서드이며, 그 이유는 다음과 같습니다.sayHi()에 대해 언급하지 않다$this.

스태틱 함수는 클래스의 인스턴스가 아니라 클래스에 관련지어집니다.그래서...$this는 스태틱콘텍스트에서는 사용할 수 없습니다($this오브젝트를 가리키고 있지 않습니다).

단순히 정적 함수는 해당 함수가 속한 클래스와 독립적으로 기능합니다.

$이것은 이 클래스의 객체임을 의미합니다.정적 기능에는 적용되지 않습니다.

class test {
    public function sayHi($hi = "Hi") {
        $this->hi = $hi;
        return $this->hi;
    }
}
class test1 {
    public static function sayHi($hi) {
        $hi = "Hi";
        return $hi;
    }
}

//  Test
$mytest = new test();
print $mytest->sayHi('hello');  // returns 'hello'
print test1::sayHi('hello');    //  returns 'Hi'

완전히 다른 점은, 당신은 이 모든 것을$this정전기능 내부에 공급됩니다.사용하려고 하면$this, 를 얻을 수 있습니다.Fatal error: Using $this when not in object context.

좋아, 다른 한 가지 차이점:E_STRICT경고는 첫 번째 예에서 생성됩니다.

스태틱 이외의 메서드를 호출하면 E_STRICT 레벨의 경고가 스태틱하게 생성됩니다.

간단히 말하면, 두 번째 경우에는 $this와 같은 개체가 없습니다. static 메서드는 객체의 인스턴스가 아닌 클래스의 함수/메서드이기 때문입니다.

예(PHP 5.3.5)를 사용해 본 결과, 어느 경우라도 사용할 수 없는 함수를 정의할 수 있는 것이 판명되었습니다.$thisoperator를 사용하여 클래스 함수 작업을 수행합니다.그래서 아직 차이를 찾을 수 없었습니다. : (

언급URL : https://stackoverflow.com/questions/902909/php-static-function

반응형