PHP에서는 클래스 이름 뒤에 범위 확인 연산자(::)를 사용하여 정적 메서드를 호출할 수 있습니다. . 그러나 일반적으로 동일한 방식으로 비정적 메서드를 호출하는 것은 불가능합니다.
이중 콜론 구문을 사용하는 비정적 메서드
아래 코드 조각은 이중 콜론 구문을 사용하여 비정적 메서드인 fun1을 호출합니다.
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun1(); // why? Teste::fun2(); // ok - is a static method
이 코드는 비정적 메소드는 클래스 이름을 통해 직접 액세스할 수 없으므로 오류가 발생합니다.
제한 이유
PHP는 정적 및 비정적에 대해 느슨한 유형 지정을 사용합니다. 정적 방법. 비정적 메서드가 정적으로 호출되면 해당 메서드 내의 $this 키워드는 클래스의 인스턴스를 참조하지 않습니다. 이러한 느슨한 동작으로 인해 코드가 일관되지 않고 오류가 발생할 수 있습니다.
정적 메서드 변형
이중 콜론 구문은 정적 메서드 호출에만 허용됩니다. 예는 다음과 같습니다.
class StaticExample { public static function staticMethod() { echo "static method"; } } StaticExample::staticMethod(); // valid
비정적 메서드 내에서
동일한 비정적 메서드 내에서 비정적 메서드를 정적으로 호출하는 것이 가능합니다. 수업. 이러한 경우 호출된 메서드 내의 $this는 여전히 올바른 개체 인스턴스를 참조합니다.
class A { public function nonStaticMethod() { echo $this->name; } } class C { public function callNonStatic() { $this->name = 'Example'; A::nonStaticMethod(); // valid } } $c = new C; $c->callNonStatic(); // prints Example
위 내용은 PHP에서 이중 콜론 구문을 사용하여 비정적 메서드를 호출할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!