<?php header("content-type:text/html;charset=UTF-8"); class Person{ //私有的成員屬性,對直接訪問象 private $name; private $age; private $sex; //魔術方法 __construct(), __set(), __unset(), __isset(), __unset()..... function __construct($name="name1",$age =20,$sex="女"){ $this->name=$name; $this->age=$age; $this->sex=$sex; } /* 輸出 Cannot access private property Person::$name 對象不能直接訪問和設置私有屬性的值,但是通過魔術方法__get($proName), __set($proName,$proValue)可以做到. 步驟: 1.重寫魔術方法__get($property) , __set($proName,$proValue) 2.用對象直接訪問或設置私有屬性 $p1->name="對象直接訪問私有屬性"; echo $p1->name; 3.對象直接訪問或設置私有屬性時,會自動調用魔法方法__get($proName), __set($proName,$proValue) */ function __get($proName){ return $this->$proName; } function __set($proName,$proValue){ $this->$proName=$proValue; } function say(){ echo "$this->name:我的年齡$this->age,性別:$this->sex<br>"; } function run(){ $this->left(); $this->right(); } private function left(){ echo "left"; } private function right(){ echo "right"; } //析構方法,對象銷毀前自動調用 function __destruct(){ echo "$this->name:我走了<br>"; } } $p1 = new Person("name1",15,"女"); $p2 = new Person("name2",20,"男"); $p3 = new Person("name3",30,"女"); /* 對象直接訪問或設置私有屬性 */ $p1->name="對象直接訪問私有屬性"; echo $p1->name."<br>"; /* 輸出,注意__destruct()的輸出順序 name1:我的年齡15,性別:女 name2:我的年齡20,性別:男 name3:我的年齡30,性別:女 name1:我走了 name3:我走了 name2:我走了 */ $p1->say(); $p2->say(); $p3->say(); $p1=null; ?>