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

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

Susan Sarandon
Susan Sarandon원래의
2024-11-27 01:15:18927검색

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

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

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

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