PHP의 정적 메서드는 비정적 메서드에 액세스할 수 있습니다. 개체를 인스턴스화하면 개체에서 비정적 메서드를 호출할 수 있습니다. 하지만 정적 메서드는 비정적 메서드를 호출할 수 있지만 생성자를 호출할 수는 없습니다.
이 문서의 운영 환경: Windows 10 시스템, PHP 버전 7.1, Dell G3 컴퓨터.
비정적 메서드를 호출하면 어떻게 되나요? 먼저 테스트를 수행하십시오.
<?php class test{ function test() { echo 'it works'; } } test::test(); ?>
다음을 실행하면 반환되는 오류는 다음과 같습니다.
Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0
이때 비정적 메서드를 정적으로 호출하는 것은 불가능하다고 생각할 수도 있지만 실제로는 결론을 내리기에는 너무 이릅니다. test() 메소드는 클래스와 이름이 같은 매우 특별하며 생성자 메소드입니다. 우리는 계속 테스트합니다.
<?php class test { function test() { echo 'it works'; } function test2() { echo 'it works too'; } } test::test2(); ?>
실행 결과:
it works too
이는 비정적 메서드를 정적으로 호출하는 것은 가능하지만 생성자를 정적으로 호출하는 것은 허용되지 않음을 보여줍니다. 이 결론을 검증하기 위해 다음과 같은 테스트를 했습니다.
<?php class test{ static function test() { echo 'it works'; } } test::test(); ?>
실행 결과는 다음과 같습니다.
Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
생성자는 정적으로 선언할 수 없으므로 위의 추론이 맞습니다.
하지만 이 결과는 정말 특별합니다. 왜냐하면 PHP만이 비정적 메서드를 정적으로 호출할 수 있기 때문입니다. Java로 실험을 해 본 결과, 비정적 메서드가 정적으로 호출되면 다음 오류가 보고됩니다.
다른 언어는 없지만, PHP의 특별한 기능을 설명하는 데는 충분합니다. PHP가 왜 그런 상황에 처해 있는지에 대한 관련 설명을 찾지 못했습니다. 추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP의 정적 메소드가 비정적 메소드에 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!