PHP使用方法重載實現(xiàn)動態(tài)創(chuàng)建屬性的get和set方法
在PHP中,我們不能夠直接通過方法名相同,簽名不同的方法來實現(xiàn)方法重載,因為PHP是弱數(shù)據(jù)類型,不能很好的區(qū)分簽名。但是,可以在PHP的類中運用__call()方法來實現(xiàn)方法重載。當(dāng)調(diào)用一個類中并不存在的方法時,會自動調(diào)用__call()方法,其形式為__call($name,$arguments) 其中$name是方法的名稱,$arguments是一個數(shù)組類型的參數(shù)。
下面的例子是使用PHP的方法重載來動態(tài)創(chuàng)建get和set方法。(在面向?qū)ο缶幊讨?,一個類中的屬性會使用get和set來賦值,但是如果一個類中有太多的屬性,比如30個,那么如果不用方法重載的話,我們就需要寫30個set方法,30個get方法,自已一邊慢慢寫去吧。。。)
<?php
class person
{
private $name;
private $age;
private $address;
private $school;
private $phonenum;
public function __call($method,$args)
{
$perfix=strtolower(substr($method,0,3));
$property=strtolower(substr($method,3));
if(empty($perfix)||empty($property))
{
return;
}
if($perfix=="get"&&isset($this->$property))
{
return $this->$property;
}
if($perfix=="set")
{
$this->$property=$args[0];
}
}
}
$p=new person();
$p->setname('lvcy');
$p->setage(23);
$p->setAddress(chengdu);
$p->setschool('uestc');
$p->setphonenum('123456');
echo $p->getname().'\\n';
echo $p->getage().'\\n';
echo $p->getaddress().'\\n';
echo $p->getschool().'\\n';
?>
通過__Call()方法很容易的解決了這個問題,而不是編寫每個屬性的get set方法。
- 解決PHP Opcache 緩存刷新、代碼重載出現(xiàn)無法更新代碼的問題
- php 使用 __call實現(xiàn)重載功能示例
- PHP面向?qū)ο蟪绦蛟O(shè)計模擬一般面向?qū)ο笳Z言中的方法重載(overload)示例
- PHP面相對象中的重載與重寫
- PHP中子類重載父類的方法【parent::方法名】
- PHP面向?qū)ο缶幊讨钊肜斫夥椒ㄖ剌d與方法覆蓋(多態(tài))
- php函數(shù)重載的替代方法--偽重載詳解
- php繼承中方法重載(覆蓋)的應(yīng)用場合
- PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
- php面向?qū)ο笕ヂ?(八)重載新的方法
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- PHP重載基礎(chǔ)知識回顧
相關(guān)文章
Javascript 判斷 object 的特定類轉(zhuǎn)載
Javascript 判斷 object 的特定類轉(zhuǎn)載...2007-02-02