php 對象直接訪問私有屬性
<?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;
?>