批改狀態(tài):合格
老師批語(yǔ):
面向?qū)ο螅侯悾簶?gòu)造器、__get查詢器、__set設(shè)置器
<?php /* * 1.類魔術(shù)方法:__get(),__set()實(shí)現(xiàn)屬性查詢器和設(shè)置器 * 2.魔術(shù)方法之前介紹過(guò)了,需要特定場(chǎng)景觸發(fā),由對(duì)象自動(dòng)調(diào)用 * 3.__get($name): 外部通過(guò)對(duì)象獲取對(duì)象私有屬性或不存在的屬性時(shí)自動(dòng)觸發(fā) * 4.__set($name,$value):外部設(shè)置私有屬性或不存在屬性值的時(shí)候自動(dòng)觸發(fā) * 5.魔術(shù)方法可以適用于所有存在或不存在的類屬性,不需要再為每個(gè)屬性創(chuàng)建對(duì)應(yīng)的訪問(wèn)接口 * * public(公有) protected(受保護(hù)) private(私有) */ class GirlFriend { //1.聲明屬性 private $name; private $age; private $stature; private $data=[]; //2構(gòu)造方法 public function __construct($name,$age,$stature,array $data=[]) { $this->name = $name; $this->age = $age; $this->stature = $stature; $this->data = $data; } //魔術(shù)方法:查詢器 public function __get($name) { $msg = null; //如果類中添加一個(gè)自定義的數(shù)據(jù)收集器$data,就從這里取值 if (isset($this->$name)) { $msg = $this->$name; } else if (isset($this->data[$name])) { $msg = $this->data[$name]; } else { $msg = '無(wú)此屬性'; } return $msg; } //魔術(shù)方法:設(shè)置器 public function __set($name, $value) { if(isset($this->$name)) { //檢測(cè)是否存在 $this->$name = $value; //存在就輸出當(dāng)前屬性 } else { //如果屬性不存在,則創(chuàng)建它并保存到類屬性$data數(shù)組中 $this->data[$name] = $value; } } }
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
<?php /** * 面向?qū)ο缶幊? * 魔術(shù)方法:_get() 和 _set() */ //導(dǎo)入類 require 'class/GirlFriend.php'; $GirlFriend = new GirlFriend('風(fēng)一樣的年紀(jì)',50,170,[80,85,90]); echo '姓名:',$GirlFriend->name,'<br>'; echo '年齡:',$GirlFriend->age,'<br>'; echo '身高:',$GirlFriend->stature,'<br>'; echo '三圍:',print_r($GirlFriend->data,true),'<br>'; echo "<hr>"; //更新以上數(shù)據(jù) $GirlFriend->name = '穎寶寶'; $GirlFriend->age = 30; $GirlFriend->stature = 160; $GirlFriend->data = [70,76,80]; //identity此字段是不存在的,也未聲明過(guò),居然也可以給一個(gè)不存在的字段,賦值,并且還能順利的獲取到,仿佛這個(gè)字段是真實(shí)存在一樣 $GirlFriend->identity = '演員'; //真實(shí)的情況是: 給一個(gè)不存在的對(duì)象屬性賦值,的確會(huì)自動(dòng)添加一個(gè)新屬性到類中,這個(gè)特性聽(tīng)上去似乎不太好,但有時(shí)卻很有用 //因?yàn)槲覀兛梢允孪葎?chuàng)建一個(gè)類屬性,專門用來(lái)收集用戶自定義所數(shù)據(jù),增加類的功能 echo "姓名:",$GirlFriend->name,'<br>'; echo "年齡:",$GirlFriend->age,'<br>'; echo "身高:",$GirlFriend->stature,'<br>'; echo "三圍:",print_r($GirlFriend->data,true),'<br>'; echo "身份:",$GirlFriend->identity,'<br>'; //使用類屬性設(shè)置器__set()再創(chuàng)建一個(gè)新屬性 $GirlFriend->email = 'milk_tea@php.cn'; //直接查看用戶自定義的類屬性$data數(shù)組的內(nèi)容,此時(shí)會(huì)輸出二個(gè)自定義數(shù)據(jù) echo '用戶自定義屬性:',$GirlFriend->email;
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
效果預(yù)覽圖:
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)