public private protected 修飾符整理

1.public定義的類或方法;任何類的實例均可以訪問php

2.private定義的屬性和方法;只能該類內部使用;若是子類要訪問父類的private屬性;必須實現__set()和__get()方法;this

3.protected定義的屬性和方法;該本類和子類或者父類內部使用。實例對象不能夠訪問;spa

 

<?php
class a
{
    private $c=100;
    private $name = 'wang san';
    public $age=200;
    
    //設置私有屬性
    public function __set($a,$val){
        echo "屬性:{$a} 值: {$val} 在直接設置私有屬性值的時候,自動調用了這個__set()方法爲私有屬性賦值<br>"; 
        $this->$a = $val;
    }
    //獲取私有屬性
    public function __get($a){
        echo "屬性:{$a} 在直接獲取私有屬性值的時候,自動調用了這個__get()方法<br>"; 
        return $this->$a;
    }
    
    private function getAge(){
        echo "我是父類私有的private";
    }
    protected function getName(){
        echo "我是父類保護性方法的protected"; 
    }
    function getALL(){
        echo "我是父類public方法";
    }
}

$a = new a();
echo $a->age.'<br>';
$a->name = '中國'; //必須實現了魔術方法__set 和 __get方法 實例對象才能夠訪問
echo $a->name.'<br>'; //輸出:中國


class b extends a
{
    public function getName2(){
        $this->getName();//子類內部可使用;可是外部不可使用
    }
    public function getAge2(){
        $this->getAge(); //報錯 不容許子類內部使用
    }
}
$b = new b();
$b->name = 22;
echo $b->name.'<br>';
//echo $b->getAge(); //錯誤 子類對實例對象 不能夠是使用
//echo $b->getName(); //錯誤 子類對實例對象 不能夠是使用
echo $b->getName2(); //可使用;子類對實例對象 能夠內部使用
//echo $b->getAge2(); //錯誤 子類對實例對象 能夠內部使用

輸出:code

相關文章
相關標籤/搜索