>  기사  >  백엔드 개발  >  PHP 상위 클래스의 비공개 메소드에 대해 이야기해 보겠습니다.

PHP 상위 클래스의 비공개 메소드에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-04-03 16:14:13650검색

PHP는 웹 애플리케이션을 개발하는 데 자주 사용되는 매우 인기 있는 서버 측 스크립팅 언어입니다. PHP에서는 속성과 메서드를 가질 수 있는 클래스를 정의할 수 있습니다. 클래스 메서드의 액세스 한정자에는 public, private 및 protected가 있습니다. 그 중 public은 클래스 외부에서 접근이 가능하고 protected와 private은 접근이 불가능하다는 뜻입니다.

상속 관계에서 하위 클래스는 상위 클래스의 공개 메서드와 속성을 상속할 수 있지만 하위 클래스는 상위 클래스의 비공개 메서드를 상속할 수 없습니다. 이 기사에서는 PHP 상위 클래스의 비공개 메소드에 관한 관련 문제를 논의합니다.

먼저 프라이빗 메소드를 이해해야 합니다.

프라이빗 메서드는 클래스 내에서만 접근할 수 있고 클래스나 서브클래스 외부에서는 접근할 수 없는 메서드를 말합니다. PHP에서는 메소드 앞에 private을 추가하여 비공개 메소드를 정의할 수 있습니다. 예:

class ParentClass {
    private function privateMethod() {
        // some code here
    }
}

이 예에서 privateMethod()는 비공개 메서드이며 ParentClass 클래스에서만 액세스할 수 있습니다. 클래스 외부나 하위 클래스에서 이 메서드에 액세스하려고 하면 오류가 보고됩니다.

하위 클래스를 정의하면 하위 클래스는 상위 클래스의 공개 및 보호 메서드와 속성을 상속받습니다. 그러나 상위 클래스의 비공개 메서드의 경우 하위 클래스가 이를 상속할 수 없습니다. 이는 상속이 is-a 관계인 반면 private 메소드는 has-a 관계에 속하기 때문입니다.

예는 다음과 같습니다.

class ParentClass {
    private function privateMethod() {
        echo "This is a private method.";
    }
    
    protected function protectedMethod() {
        echo "This is a protected method.";
    }
}

class ChildClass extends ParentClass {
    // some code here
}

$childObj = new ChildClass();
$childObj->protectedMethod(); // This is a protected method.
$childObj->privateMethod(); // Fatal error: Call to private method ParentClass::privateMethod() from context...

이 예에서는 비공개 메서드 privateMethod()와 보호 메서드 protectedMethod()가 포함된 ParentClass 클래스를 정의합니다. 또한 ParentClass 클래스를 상속하는 ChildClass 클래스를 정의합니다.

자식 클래스에서 보호 메소드인 protectedMethod()를 호출하면 잘 동작하는데, 상위 클래스의 프라이빗 메소드인 privateMethod()를 호출하려고 하면 치명적인 오류가 발생합니다.

그럼 하위 클래스에서 상위 클래스의 비공개 메서드에 어떻게 액세스하나요? 한 가지 방법은 부모 클래스의 공개 또는 보호 메서드를 사용하여 개인 메서드를 호출하는 것입니다.

예:

class ParentClass {
    private function privateMethod() {
        echo "This is a private method.";
    }
    
    protected function protectedMethod() {
        echo "This is a protected method.";
        $this->privateMethod(); // call private method
    }
}

class ChildClass extends ParentClass {
    public function publicMethod() {
        $this->protectedMethod(); // call protected method
    }
}

$childObj = new ChildClass();
$childObj->publicMethod(); // This is a protected method. This is a private method.

이 예에서는 부모 클래스의 보호 메서드에서 개인 메서드를 호출하고 자식 클래스에서 보호 메서드 protectedMethod()를 호출하는 공용 메서드 publicMethod()를 정의합니다. 하위 클래스의 publicMethod() 메서드를 호출하면 "This is a protected method. This is a private method."가 출력됩니다.

요약

PHP에서 프라이빗 메서드는 클래스 메서드 내에서만 액세스할 수 있습니다. 자식 클래스는 부모 클래스의 private 메서드를 상속받을 수 없지만 부모 클래스에 public 또는 protected 메서드를 포함시켜 해당 메서드에 액세스할 수 있습니다. 즉, 예기치 않은 오류를 방지하려면 상속할 때 부모 클래스의 비공개 메서드에 액세스하는 데 주의를 기울여야 합니다.

위 내용은 PHP 상위 클래스의 비공개 메소드에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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