이중 콜론 구문으로 비정적 메서드 호출
PHP에서는 이중 콜론 구문을 사용하여 정적 메서드를 호출하는 것이 일반적입니다. ClassName::methodName()과 같은 것입니다. 그러나 이 구문을 사용하여 비정적 메서드를 호출하려고 하면 혼란이 발생할 수 있습니다.
비정적 메서드에서 이중 콜론 구문이 작동하지 않는 이유
정적 메서드와 달리 비정적 메서드는 작동하려면 클래스 인스턴스가 필요합니다. ClassName::methodName()을 사용하여 비정적 메서드를 호출하면 PHP는 이를 정적 메서드로 해석합니다. 이는 특정 인스턴스 변수가 필요하거나 $this 키워드에 액세스해야 하는 메서드에는 적합하지 않습니다.
PHP의 느슨한 타이핑
PHP는 정적 메소드와 비정적 메소드를 다르게 처리하지만, 이 부분에서는 PHP가 상대적으로 느슨하다는 점에 유의하는 것이 중요합니다. 관심. 이중 콜론 구문을 사용하여 비정적 메소드를 호출하는 것이 기술적으로 올바르지 않더라도 PHP는 특정 상황에서 이를 허용할 수 있습니다.
그러나 이 동작은 특히 엄격한 오류 보고를 사용할 때 예상치 못한 결과나 오류로 이어질 수 있습니다. . 이러한 경우 PHP는 객체에서 비정적 메서드를 호출해야 함을 나타내는 오류를 발생시킵니다.
비정적 메서드에서 $this 참조
흥미롭게도 , PHP에서는 동일한 클래스의 다른 비정적 메서드 내에서 비정적 메서드를 정적으로 호출할 수 있습니다. 이 경우 호출된 메서드의 $this 키워드는 호출 클래스의 인스턴스를 참조합니다.
예를 들어 다음 코드를 고려하세요.
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // prints hello
이 예에서 클래스 A의 test() 메서드는 클래스 C의 q() 메서드에서 정적으로 호출됩니다. test()의 $this 키워드는 C 인스턴스($c)를 참조하여 코드가 name 속성에 액세스하고 인쇄할 수 있도록 합니다. "안녕하세요."
위 내용은 이중 콜론 구문을 사용하여 비정적 PHP 메서드를 호출할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!