>  기사  >  백엔드 개발  >  PHP 객체의 클래스에 대한 상속된 액세스 유형 제어에 대한 자세한 설명

PHP 객체의 클래스에 대한 상속된 액세스 유형 제어에 대한 자세한 설명

黄舟
黄舟원래의
2017-07-02 11:32:081026검색

액세스 제어 유형을 사용하면 개발자는 수정자를 사용하여 클래스 멤버에 대한 액세스를 제한할 수 있습니다. 이는 PHP5의 새로운 기능이며 OOP 언어의 중요한 기능입니다. 대부분의 OOP 언어는 이미 이 기능을 지원합니다. PHP5는 다음 세 가지 액세스 수정자를 지원하며 그 중 두 가지는 클래스 캡슐화에 도입되었습니다. 여기서 요약하면 액세스 제어 수정자에는 공개(공개, 기본값), 비공개(비공개) 및 보호됨(보호됨)이 포함됩니다. 이들의 기능과 차이점은 다음 표에 나와 있습니다.

PHP 객체의 클래스에 대한 상속된 액세스 유형 제어에 대한 자세한 설명

①공개 액세스 한정자 public

이 한정자를 사용하면 클래스의 멤버는 액세스 제한이 없으며 모든 외부 멤버는 액세스할 수 있습니다. PHP5 이전의 모든 버전에서는 PHP 클래스의 멤버가 공개되었습니다.

②Private 접근 한정자 private

클래스의 멤버가 private으로 정의되면 같은 클래스에 있는 모든 멤버에 대한 접근 제한은 없지만 클래스의 외부 코드는 변경되거나 작동조차 허용되지 않습니다. 이 클래스의 하위 클래스에서는 비공개 수정 멤버에 액세스할 수 없습니다. 코드는 다음과 같습니다.

<?php
    //声明一个类作为父类使用,将它的成员都声明为私有的
    class MyClass {
        private $var1=100;
 
        private function  printHello(){
            echo "hello<br>";     
        }
    }
 
    //声明一个Myclass类的子类师徒访问父类中的私有成员
    class MyClass2 extends MyClass{
        function useProperty(){
            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";
            $this ->printHello();
        }
    }
 
    $subObj = new MyClass2();
    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问
?>


위 코드에서는 MyClass 클래스가 선언되었고, 클래스에는 private 멤버 속성과 private member 메서드가 선언되었으며, MyClass 클래스를 상속하도록 MyClass2 클래스가 선언되었습니다. 하위 클래스 MyClass2의 상위 클래스에 있는 비공개 멤버에 액세스합니다. 하지만 상위 클래스의 private 멤버는 자신의 클래스에서만 사용할 수 있으므로 접근 오류가 발생합니다.

3 protected 액세스 수정자 protected

는 protected 멤버로 수정되며, 이 클래스의 하위 클래스와 하위 클래스의 하위 클래스에 대한 액세스 권한을 가지며 속성과 메서드를 읽고 쓸 수 있습니다. 그러나 이 클래스의 외부 코드에서는 액세스할 수 없으며 이 하위 클래스의 외부 코드에는 해당 속성 및 메서드에 대한 추가 권한이 없습니다. 위 예시에서 부모 클래스의 접근권한을 protected로 변경하면, 서브클래스에서는 부모 클래스의 멤버에 접근할 수 있지만, 클래스 외부에서는 접근할 수 없으므로 객체 캡슐화 목적도 완수할 수 있습니다. 코드는 다음과 같습니다.

<?php
    class MyClass {
        protected $var1=100;
 
        protected function  printHello(){
            echo "hello<br>";     
        }
    }
 
    //声明一个Myclass类的子类师徒访问父类中的保护成员
    class MyClass2 extends MyClass{
        function useProperty(){
            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";
            $this ->printHello();
        }
    }
 
    $subObj = new MyClass2();
    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问
 
    echo $subObj ->var1;         //试图访问类中受保护的成员,结果出错
?>
위 예제에서 MyClass 클래스의 멤버는 protected 한정자를 사용하여 protected로 설정되었으며 서브클래스에서 직접 액세스할 수 있습니다. 그러나 하위 클래스 외부에서 보호되고 수정된 멤버에 액세스하는 것은 오류입니다.


위 내용은 PHP 객체의 클래스에 대한 상속된 액세스 유형 제어에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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