>백엔드 개발 >PHP 튜토리얼 >이중 콜론 구문을 사용하여 비정적 PHP 메서드를 호출할 수 없는 이유는 무엇입니까?

이중 콜론 구문을 사용하여 비정적 PHP 메서드를 호출할 수 없는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-03 21:13:12413검색

Why Can't I Call Non-Static PHP Methods Using the Double-Colon Syntax?

이중 콜론 구문으로 비정적 메서드 호출

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.