>백엔드 개발 >PHP 문제 >PHP의 정적 메소드가 비정적 메소드에 액세스할 수 있습니까?

PHP의 정적 메소드가 비정적 메소드에 액세스할 수 있습니까?

WBOY
WBOY원래의
2022-03-22 16:54:402184검색

PHP의 정적 메서드는 비정적 메서드에 액세스할 수 있습니다. 개체를 인스턴스화하면 개체에서 비정적 메서드를 호출할 수 있습니다. 하지만 정적 메서드는 비정적 메서드를 호출할 수 있지만 생성자를 호출할 수는 없습니다.

PHP의 정적 메소드가 비정적 메소드에 액세스할 수 있습니까?

이 문서의 운영 환경: Windows 10 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

PHP의 정적 메서드가 비정적 메서드에 액세스할 수 있나요?

비정적 메서드를 호출하면 어떻게 되나요? 먼저 테스트를 수행하십시오.

<?php
class test{
    function test() {
        echo &#39;it works&#39;;
    }
}
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 &#39;it works&#39;;
    }
    function test2() {
        echo &#39;it works too&#39;;
    }
}
test::test2();
?>

실행 결과:

it works too

이는 비정적 메서드를 정적으로 호출하는 것은 가능하지만 생성자를 정적으로 호출하는 것은 허용되지 않음을 보여줍니다. 이 결론을 검증하기 위해 다음과 같은 테스트를 했습니다.

<?php
class test{
    static function test() {
        echo &#39;it works&#39;;
    }
}
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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