初學 PHP __set ( ) 和 __ get ( )

青風百里發表於2018-10-24

在類外,不能修改和讀取類中的私有屬性或者受保護的屬性,為了到達目的,可以在類中定義一個公共的方法供使用

<?php
class Staff{
    private $name;
    private $salary;

    public function setSalary($salary){
        $this->salary = $salary;
    }

    public function getSalary(){
        return $this->salary;
    }
}

$staff = new Staff();
$staff->setSalary(1000);
echo $staff->getSalary();//輸出 1000

上面的這種方式不靈活,如果要設定別的屬性,還要再寫相應的方法,可以寫一個通用的設定屬性的方法,如下

<?php
class Staff{
    private $name;
    private $salary;

    public function setAttribute($Attribute, $value){
        $this->$Attribute = $value;
    }

    public function getAttribute($Attribute){
        return $this->$Attribute;
    }
}

$staff = new Staff();
$staff->setAttribute("name", "劉看山");
echo $staff->getAttribute("name");//輸出 劉看山

當訪問私有的或者受保護的屬性時, __set() __get() 這兩個魔術方法會被呼叫

<?php
class Staff{
    private $name;
    private $salary;

    public function __set($Attribute, $value){
        $this->$Attribute = $value;
    }

    public function __get($Attribute){
        return $this->$Attribute;
    }
}

$staff = new Staff();
$staff->name = "劉看山";
echo $staff->name;//輸出 劉看山

青風百里

相關文章