時間:2019-08-06
概述:面象對象
PHP封裝一個類的方法和代碼示例,封裝一個“人物”類對象,通過這個對象的自定義,你或許會明白面向對象是怎麼一回事:
class Person {
private $name;//此屬性被封裝
private $sex;//此屬性被封裝
private $age;//此屬性被封裝
function __construct($name="", $sex="男", $age=1) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
private function __isset($propertyName) {//需要一個參數,是測定的私有屬性的名稱
if($propertyName == "name") //如果參數中傳入的屬性名等于“name”時條件成立
return false;//傳回假,不允許在對象外部測定這個屬性
return isset($this->$propertyName);//其他的屬性都可以被測定,并傳回測定的結果
}
private function __unset($propertyName) {//需要一個參數,是要删除的私有屬性名稱
if($propertyName == "name") //如果參數中傳入的屬性名等于“name”時條件成立
return; //退出方法,不允許删除對象中的name屬性
unset($this->$propertyName); //在對象的内部删除在對象外指定的私有屬性
}
public function say() {
echo "我的名字:".$this->name.",性别:".$this->sex.",年齡:".$this->age."。
";
}
}
$person1 = new Person("張三", "男", 40); //建立一個對象$person1,将成員屬性分别賦上初值
var_dump( isset( $person1->name ) );//輸出bool(false),不允許測定name屬性
var_dump( isset( $person1->sex ) );//輸出bool(true),存在sex私有屬性
var_dump( isset( $person1->age ) );//輸出bool(true),對象中存在age私有屬性
var_dump( isset( $person1->id ) );//輸出bool(false),測定對象中不存在id屬性
unset( $person1->name );//删除私有屬性name,但在__unset()中不允許删除
unset( $person1->sex ); //删除對象中的私有屬性sex,删除成功
unset( $person1->age );//删除對象中的私有屬性age,删除成功
$person1->say();//對象中的sex和age屬性被删除,輸出:我的名字叫:張三,性别:,我的年齡是:
?>