在類外,不能修改和讀取類中的私有屬性或者受保護的屬性,為了到達目的,可以在類中定義一個公共的方法供使用
<?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;//輸出 劉看山