首頁  >  文章  >  後端開發  >  關於php物件中類別的繼承性存取類型控制的詳解

關於php物件中類別的繼承性存取類型控制的詳解

黄舟
黄舟原創
2017-07-02 11:32:081026瀏覽

類型的存取控制透過使用修飾符允許開發人員對類別中成員的存取進行限制。這是PHP5的新特性,也是OOP語言中的重要特性,大多數OOP語言都已支援此特性。 PHP5支援以下三種存取修飾符,在類別的封裝中我們已經介紹過了兩種。這裡總結一下,存取控制修飾符包括public(公有的、預設的)、privat(私有的)和protected(受保護的)三種哦。他們的作用及其之間的差異如下表所示:

關於php物件中類別的繼承性存取類型控制的詳解

①公有的存取修飾符public

##使用這種修飾符則類別中的成員將沒有存取限制,所有的外部成員都可以存取這個類別中的成員,在PHP5之前的所有版本中,PHP中類別的成員都是public的。

②私有的存取修飾符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,在類別中宣告了一個私有的成員屬性和一個私有的
成員方法,又宣告了一個類別MyClass2繼承類別MyClass,並在子類別MyClass2中存取父類別中的私有成員。但父類別中的私有成員只能在它的本類別中使用,所以存取出錯。

③保護的存取修飾符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