PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法
在PHP中,我們不能夠直接通過(guò)方法名相同,簽名不同的方法來(lái)實(shí)現(xiàn)方法重載,因?yàn)镻HP是弱數(shù)據(jù)類型,不能很好的區(qū)分簽名。但是,可以在PHP的類中運(yùn)用__call()方法來(lái)實(shí)現(xiàn)方法重載。當(dāng)調(diào)用一個(gè)類中并不存在的方法時(shí),會(huì)自動(dòng)調(diào)用__call()方法,其形式為_(kāi)_call($name,$arguments) 其中$name是方法的名稱,$arguments是一個(gè)數(shù)組類型的參數(shù)。
下面的例子是使用PHP的方法重載來(lái)動(dòng)態(tài)創(chuàng)建get和set方法。(在面向?qū)ο缶幊讨?,一個(gè)類中的屬性會(huì)使用get和set來(lái)賦值,但是如果一個(gè)類中有太多的屬性,比如30個(gè),那么如果不用方法重載的話,我們就需要寫(xiě)30個(gè)set方法,30個(gè)get方法,自已一邊慢慢寫(xiě)去吧。。。)
<?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';
?>
通過(guò)__Call()方法很容易的解決了這個(gè)問(wèn)題,而不是編寫(xiě)每個(gè)屬性的get set方法。
- 解決PHP Opcache 緩存刷新、代碼重載出現(xiàn)無(wú)法更新代碼的問(wèn)題
- php 使用 __call實(shí)現(xiàn)重載功能示例
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)模擬一般面向?qū)ο笳Z(yǔ)言中的方法重載(overload)示例
- PHP面相對(duì)象中的重載與重寫(xiě)
- PHP中子類重載父類的方法【parent::方法名】
- PHP面向?qū)ο缶幊讨钊肜斫夥椒ㄖ剌d與方法覆蓋(多態(tài))
- php函數(shù)重載的替代方法--偽重載詳解
- php繼承中方法重載(覆蓋)的應(yīng)用場(chǎng)合
- PHP利用func_get_args和func_num_args函數(shù)實(shí)現(xiàn)函數(shù)重載實(shí)例
- php面向?qū)ο笕ヂ?(八)重載新的方法
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- PHP重載基礎(chǔ)知識(shí)回顧
相關(guān)文章
微信JS SDK接入的幾點(diǎn)注意事項(xiàng)(必看篇)
下面小編就為大家?guī)?lái)一篇微信JS SDK接入的幾點(diǎn)注意事項(xiàng)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
uniapp中scroll-view基礎(chǔ)用法示例代碼
我們?cè)陧?xiàng)目中往往都能遇到實(shí)現(xiàn)左右滑動(dòng)跟上下滑動(dòng)的需求,下面這篇文章主要給大家介紹了關(guān)于uniapp中scroll-view基礎(chǔ)用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
javascript淺層克隆、深度克隆對(duì)比及實(shí)例解析
這篇文章主要介紹了javascript淺層克隆、深度克隆對(duì)比及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
基于JavaScript實(shí)現(xiàn)新年賀卡特效
本文介紹了一款超級(jí)炫酷的2022新年快樂(lè)html網(wǎng)頁(yè)特效,霓虹的城市夜景和絢爛的煙花很是特別,該html頁(yè)面還有交互效果,點(diǎn)擊鼠標(biāo)就會(huì)呈現(xiàn)煙花綻放的特效。需要的可以參考一下2022-01-01
淺談JavaScript中面向?qū)ο蠹夹g(shù)的模擬
淺談JavaScript中面向?qū)ο蠹夹g(shù)的模擬...2006-09-09
Elasticsearch實(shí)現(xiàn)復(fù)合查詢高亮結(jié)果功能
這篇文章主要介紹了Elasticsearch實(shí)現(xiàn)復(fù)合查詢,高亮結(jié)果功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
詳解JS如何實(shí)現(xiàn)文字溢出時(shí)用省略號(hào)...顯示
這篇文章主要為大家詳細(xì)介紹了JavaScript如何實(shí)現(xiàn)當(dāng)文本內(nèi)容過(guò)長(zhǎng)時(shí),中間顯示省略號(hào)...,兩端正常展示,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02

