电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP基礎之類和對象13——重載

瀏覽:2日期:2022-09-14 18:35:28
PHP所提供的'重載'(overloading)是指動態(tài)地'創(chuàng)建'類屬性和方法。我們是通過魔術方法(magic methods)來實現(xiàn)的。

當調用當前環(huán)境下未定義或不可見的類屬性或方法時,重載方法會被調用。

所有的重載方法都必須被聲明為?public。

注意:

1)這些魔術方法的參數(shù)都不能通過引用傳遞。

2)PHP中的'重載'與其它絕大多數(shù)面向對象語言不同。傳統(tǒng)的'重載'是用于提供多個同名的類方法,但各方法的參數(shù)類型和個數(shù)不同。

屬性重載

public void__set(string$name, mixed$value)publicmixed__get(string$name)publicbool__isset(string$name)publicvoid__unset(string$name)

在給不可訪問屬性賦值時,__set()?會被調用。

讀取不可訪問屬性的值時,__get()?會被調用。

當對不可訪問屬性調用?isset()?或?empty()?時,__isset()?會被調用。

當對不可訪問屬性調用?unset()?時,__unset()?會被調用。

參數(shù) $name 是指要操作的變量名稱。__set()?方法的 $value 參數(shù)指定了 $name 變量的值。

屬性重載只能在對象中進行。在靜態(tài)方法中,這些魔術方法將不會被調用。所以這些方法都不能被 聲明為?static。從 PHP 5.3.0 起, 將這些魔術方法定義為?static?會產(chǎn)生一個警告。

注意:

因為 PHP 處理賦值運算的方式,__set()?的返回值將被忽略。類似的, 在下面這樣的鏈式賦值中,__get()?不會被調用:

$a = $obj->b = 8;

注意:

在除?isset()?外的其它語言結構中無法使用重載的屬性,這意味著當對一個重載的屬性使用?empty()?時,重載魔術方法將不會被調用。

為避開此限制,必須將重載屬性賦值到本地變量再使用?empty()。

Example #1 使用?__get(),__set(),__isset()?和?__unset()?進行屬性重載

class PropertyTest{ /*被重載的數(shù)據(jù)保存在此*/ private $data = array(); /*重載不能被用在已經(jīng)定義的屬性*/ public $declared = 1; /*只有從類外部訪問這個屬性時,重載才會發(fā)生*/ private $hidden = 2; public function __set($name,$value) {echo 'Setting ’$name’ to ’$value’<br>';$this->data[$name] = $value; } public function __get($name) {echo 'Getting ’$name’<br>';if(array_key_exists($name,$this->data)){ return $this->data[$name];}$trace = debug_backtrace();trigger_error(’未知屬性 via __get():’.$name.’ in ’.$trace[0][’file’].’ on line ’.$trace[0][’line’], E_USER_NOTICE); return null; } /*PHP5.1.0之后的版本*/ public function __isset($name){echo 'Is ’$name’ set?<br>';return isset($this->data[$name]); } /*PHP5.1.0之后的版本*/ public function __unset($name){echo 'Unsetting ’$name’<br>';unset($this->data[$name]); } /*非魔術方法*/ public function getHidden(){return $this->hidden; }}echo ’<pre>’;$obj = new PropertyTest;$obj->a = 1;echo $obj->a.’<br>’;var_dump(isset($obj->a));unset($obj->a);echo ’<br>’;echo $obj->declared.’<br>’;echo 'Let’s experiment with the private property named ’hidden’:<br>';echo 'Privates are visible inside the class,so __set() not used...<br>';echo $obj->getHidden().’<br>’;echo 'Privates not visible outside of class,so __get() is used...<br>';echo $obj->hidden;

輸出結果:

Setting ’a’ to ’1’

Getting ’a’

1

Is ’a’ set?

bool(true)Unsetting ’a’

1

Let’s experiment with the private property named ’hidden’:

Privates are visible inside the class,so __set() not used...

2

Privates not visible outside of class,so __get() is used...

Getting ’hidden’

方法重載

public mixed __call ( string$name , array$arguments )public static mixed __callStatic ( string$name , array$arguments )

在對象中調用一個不可訪問方法時,__call()?會被調用。

用靜態(tài)方式中調用一個不可訪問方法時,__callStatic()?會被調用。

$name 參數(shù)是要調用的方法名稱。$arguments 參數(shù)是一個枚舉數(shù)組,包含著要傳遞給方法 $name 的參數(shù)。

Example #2 使用?__call()?和?__callStatic()?對方法重載

class MethodTest{ public function __call($name,$arguments) {//注意:$name的值區(qū)分大小寫echo 'Calling object method ’$name’ '.implode(’,’,$argument).’<br>’; } //PHP5.3.0之后的版本 public static function __callStatic($name,$arguments) {//注意:$name的值區(qū)分大小寫echo 'Calling static method ’$name’ '.implode(’,’,$argument).’<br>’; }}$obj = new MethodTest;$obj -> runTest(’in object context’);MethodTest::runTest(’in static context’);

輸出結果:

Calling object method ’runTest’

Calling object method ’runTest’

標簽: PHP
相關文章:
主站蜘蛛池模板: 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 非甲烷总烃分析仪|环控百科| 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 天长市晶耀仪表有限公司 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 高压负荷开关-苏州雷尔沃电器有限公司| 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | RFID电子标签厂家-上海尼太普电子有限公司 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 换网器_自动换网器_液压换网器--郑州海科熔体泵有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 |