program story

PHP 정적 함수

inputbox 2020. 8. 13. 08:20
반응형

PHP 정적 함수


PHP의 정적 기능에 관한 질문이 있습니다.

내가 수업이 있다고 가정합시다

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

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

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

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

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

정적 함수의 특별한 점은 무엇입니까?


첫 번째 클래스에서 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와 같은 객체가 없습니다. 정적 메서드는 객체 인스턴스가 아닌 클래스의 함수 / 메서드이기 때문입니다.


예제 (PHP 5.3.5)를 시도한 후 함수를 정의하는 두 경우 모두 $this연산자를 사용 하여 클래스 함수에서 작업 할 수 없다는 것을 발견했습니다 . 그래서 아직 차이점을 찾을 수 없었습니다. :(

참고 URL : https://stackoverflow.com/questions/902909/php-static-function

반응형