7.5.2 PHP面向?qū)ο蠓庋b性2

7.5.2 PHP面向?qū)ο蠓庋b性2

封裝性是面向?qū)ο缶幊讨械娜筇匦灾?,封裝就是把對(duì)象中的成員屬性和成員方法加上訪問修飾符,使其盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié),以達(dá)到對(duì)成員的訪問控制(切記不是拒絕訪問)。
這是PHP5的新特性,但卻是OOP語言的一個(gè)好的特性。而且大多數(shù)OOP語言都已支持此特性。
PHP5支持如下3種訪問修飾符:
public (公有的 默認(rèn)的)
private (私有的)
protected (受保護(hù)的)

設(shè)置私用成員

只要在聲明成員屬性或成員方法時(shí),使用private關(guān)鍵字修飾就是實(shí)現(xiàn)了對(duì)成員的私有封裝。封裝后的成員在對(duì)象的外部不能直接訪問,只能在對(duì)象的內(nèi)部方法中使用 $this訪問。

<?php
    class Person  {                     
        private $name;             //第一個(gè)成員屬性$name定義人的名字,此屬性被封裝
        private $sex;                //第二個(gè)成員屬性$sex定義人的性別,此屬性被封裝
        public function __construct($name="", $sex="男") {
            $this->name = $name;        
            $this->sex = $sex;          
         }
        private function leftLeg() {    //聲明一個(gè)邁左腿的方法,被封裝所以只能在內(nèi)部使用
            return "邁左腿";
        }
     }
<?php
    class Person  {                 
    private $name;            //第一個(gè)成員屬性$name定義人的名字,此屬性被封裝
        private $sex;               //第二個(gè)成員屬性$sex定義人的性別,此屬性被封裝
            
            public  function setName($name ) {  //通過此方法設(shè)置屬性name的值
                          $this->name=$name;                 //為對(duì)象的私有屬性賦值
            }
        public function getName(){            //通過此方法獲取屬性name的值
                          return $this->name;              //返回當(dāng)前的私有名字屬性
            }        
            public function setSex($sex) {       //通過此方法設(shè)置屬性sex的值
                          if($sex=="男" || $sex=="女")   //如果傳入合法的值才為私有的屬性賦值
                                 $this->sex=$sex;             //條件成立則將參數(shù)傳入的值賦給私有屬性
            }
        public function getSex(){               //通過此方法獲取屬性$sex的值
                          return $this->sex;                 //返回當(dāng)前的私有性別屬性
            }

__set()、__get()、__isset()和__unset()

魔術(shù)方法:
__set(): 用于替代通用的set賦值方法
__get(): 用于替代通用的get取值方法
__isset(): 檢測對(duì)象中成員屬性是否存在
__unset(): 銷毀對(duì)象中成員屬性方法
注意:
上面四個(gè)魔術(shù)方法只對(duì)類中的私有、受保護(hù)成員屬性有效。
魔術(shù)方法前的修飾符可以是公有、私有,不影響調(diào)用。

__set( )方法:
格式 [修飾符] function __set(string $name,mixed $value){
... }
當(dāng)我們直接為一個(gè)對(duì)象中非公有屬性賦值時(shí)會(huì)自動(dòng)調(diào)用此方法,并將屬性名以第一個(gè)參數(shù)(string),值作為第二參數(shù)(mixed)傳進(jìn)此方法中。
__get( )方法:
格式:[修飾符] function __get(string $name){ ... }
當(dāng)我們直接輸出一個(gè)對(duì)象中非公有屬性時(shí)會(huì)自動(dòng)調(diào)用此方法,并將屬性名以第一個(gè)參數(shù)傳進(jìn)去。

<?php
/*
 *   只看封裝的一部分, 方法的封裝
 *
 *
 *   將一些“特殊的方法 ” 加上一個(gè) 關(guān)鍵字 private修飾, 就不能拿到這個(gè)對(duì)象之后, 用對(duì)象中private有的內(nèi)容, 但對(duì)象自己中的其它成員可以使用這個(gè), 因?yàn)槭亲约河米约旱某蓡T
 *
 *
 *
 */


    class Person  {
        //成員屬性
        private $name;
        private $age;
        private $sex;

        //構(gòu)造方法
        function __construct($name="", $age=0, $sex="男") {
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
        }   

        function setSex($sex) {
            if(!($sex=="男" or $sex =="女"))
                return;

            $this->sex = $sex;
        }


        function getAge() {
            if($this->age < 20){
                return $this->age;
            }else if($this->age < 30){
                return $this->age - 5;
            }else if($this->age < 40) {
                return $this->age - 8;
            }else{
                return 29;
            }
        }

        //成員方法
        function say() {
            echo "我的名子是:{$this->name}, 我的年齡是:{$this->age},  我的性別是:{$this->sex}.<br>";
        }


        function run() {
            $this->left();      
            $this->left();

            $this->right();
            $this->right();

            $this->go();        
            $this->go();        
            $this->go();        
        }


        private function left() {
            echo "邁左腳<br>";
        }

        private function right() {
            echo "邁右腳<br>";
        }

        private function go() {
            echo "前進(jìn)<br>";
        }


        function eat() {
            $this->say();
        }

        //析構(gòu)方法
        function __destruct() {
            echo "再見:{$this->name} <br>";
        }
    
    }

    $p1 = new Person("妹子", 88, "女");

    //$p1->age=120;

//  echo $p1->age;
    //  $p1 -> setSex("男");
    //
    echo $p1 -> getAge();
//  echo $p1->say();

test.php

<?php
/*
 *   只看封裝的一部分, 方法的封裝
 *
 *
 *   將一些“特殊的方法 ” 加上一個(gè) 關(guān)鍵字 private修飾, 就不能拿到這個(gè)對(duì)象之后, 用對(duì)象中private有的內(nèi)容, 但對(duì)象自己中的其它成員可以使用這個(gè), 因?yàn)槭亲约河米约旱某蓡T
 *
 *
 *
 */


    class Person  {
        //成員屬性
        private $name;
        private $age;
        private $sex;

        //構(gòu)造方法
        function __construct($name="", $age=0, $sex="男") {
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
        }   

        function setSex($sex) {
            if(!($sex=="男" or $sex =="女"))
                return;

            $this->sex = $sex;
        }


        function getAge() {
            if($this->age < 20){
                return $this->age;
            }else if($this->age < 30){
                return $this->age - 5;
            }else if($this->age < 40) {
                return $this->age - 8;
            }else{
                return 29;
            }
        }

        //成員方法
        function say() {
            echo "我的名子是:{$this->name}, 我的年齡是:{$this->age},  我的性別是:{$this->sex}.<br>";
        }


        function run() {
            $this->left();      
            $this->left();

            $this->right();
            $this->right();

            $this->go();        
            $this->go();        
            $this->go();        
        }


        private function left() {
            echo "邁左腳<br>";
        }

        private function right() {
            echo "邁右腳<br>";
        }

        private function go() {
            echo "前進(jìn)<br>";
        }


        function eat() {
            $this->say();
        }

        //析構(gòu)方法
        function __destruct() {
            echo "再見:{$this->name} <br>";
        }
    
    }

    $p1 = new Person("妹子", 88, "女");

    //$p1->age=120;

//  echo $p1->age;
    //  $p1 -> setSex("男");
    //
    echo $p1 -> getAge();
//  echo $p1->say();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容