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

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

PHP 使用 Trait 解決 PHP 單繼承問題詳解

瀏覽:128日期:2022-09-10 17:04:43

本文實例講述了PHP 使用 Trait 解決 PHP 單繼承問題。分享給大家供大家參考,具體如下:

什么是繼承?

繼承實際上是存在于面向對象程序設計中的兩個類之間的一種關系,是面向對象程序設計方法的一個重要手段,通過繼承可以更有效地組織程序結構,明確類間的關系,充分利用已有的類來完成更復雜、更深入的開發。

當一個類擁有另一個類的所有數據和操作時,就稱這兩個類之間具有繼承關系。

被繼承的類稱為父類,繼承了父類的所有數據和操作的類稱為子類。

在 PHP 中用 extends 表明子類與父類的繼承關系。

在面向對象的程序設計中,采用繼承的方式來組織設計系統中的類,可以提高程序的抽象程度,更接近人的思維方式,使程序結構更清晰并降低編碼和維護的工作量。

單繼承是指任何一個類都只有一個單一的父類,其結構可以用單純的樹狀結構來表示; 多繼承是指一個類可以有一個以上的父類,它的靜態的數據屬性和操作從所有這些父類中繼承,其結構應以復雜的網狀結構來表示。

PHP 僅支持單繼承,而多繼承是通過接口或者 Trait 來實現的。

PHP 的單繼承示例:

// 單繼承:一個子類只能有一個父類class A{ function show() { echo 'A'; }}class B{ function show() { echo 'B'; }}class C extends A{}$c = new C;$c->show();使用 Trait 解決 PHP 的單繼承

自 PHP 5.4.0 起,PHP 實現了一種代碼復用的方法,稱為 trait。

Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制 Trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用 method Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統多繼承和 Mixin 類相關典型問題 無法通過 trait 自身來實例化

示例:

<?php trait Reader{ public function add($var1,$var2){ return $var1+$var2; } } trait writer { public function multiplication($var1,$var2){ return $var1*$var2; } } class File { use Reader; use writer; public function calculate($var1,$var2){ echo 'Ressult of addition:'.$this->add($var1,$var2) .'n'; echo 'Ressult of multiplication:'.$this->multiplication($var1,$var2); } } $o = new File(); $o->calculate(5,3);多個 trait

通過逗號分隔,在 use 聲明列出多個 trait,可以都插入到一個類中。

<?phptrait Hello { public function sayHello() { echo ’Hello ’; }}trait World { public function sayWorld() { echo ’World’; }}class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo ’!’; }}$o = new MyHelloWorld();$o->sayHello();$o->sayWorld();$o->sayExclamationMark();沖突的解決

如果兩個 trait 都插入了一個同名的方法,如果沒有明確解決沖突將會產生一個致命錯誤。

為了解決多個 trait 在同一個類中的命名沖突,需要使用 insteadof 操作符來明確指定使用沖突方法中的哪一個。

以上方式僅允許排除掉其它方法,as 操作符可以 為某個方法引入別名。 注意,as 操作符不會對方法進行重命名,也不會影響其方法。

示例:

<?phptrait A { public function smallTalk() { echo ’a’; } public function bigTalk() { echo ’A’; }}trait B { public function smallTalk() { echo ’b’; } public function bigTalk() { echo ’B’; }}class Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; }}class Aliased_Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; B::bigTalk as talk; }}從 trait 來組成 trait

正如 class 能夠使用 trait 一樣,其它 trait 也能夠使用 trait。在 trait 定義時通過使用一個或多個 trait,能夠組合其它 trait 中的部分或全部成員。

<?phptrait Hello { public function sayHello() { echo ’Hello ’; }}trait World { public function sayWorld() { echo ’World!’; }}trait HelloWorld { use Hello, World;}class MyHelloWorld { use HelloWorld;}$o = new MyHelloWorld();$o->sayHello();$o->sayWorld();Trait 的抽象成員

為了對使用的類施加強制要求,trait 支持抽象方法的使用。

<?phptrait Hello { public function sayHelloWorld() { echo ’Hello’.$this->getWorld(); } abstract public function getWorld();}class MyHelloWorld { private $world; use Hello; public function getWorld() { return $this->world; } public function setWorld($val) { $this->world = $val; }}Trait 的靜態成員

Traits 可以被靜態成員靜態方法定義。

<?php// 靜態成員trait Counter { public function inc() { static $c = 0; $c = $c + 1; echo '$cn'; }}class C1 { use Counter;}class C2 { use Counter;}$o = new C1(); $o->inc(); // echo 1$p = new C2(); $p->inc(); // echo 1

<?php// 靜態方法trait StaticExample { public static function doSomething() { return ’Doing something’; }}class Example { use StaticExample;}Example::doSomething();

<?php// 定義屬性trait PropertiesTrait { public $x = 1;}class PropertiesExample { use PropertiesTrait;}$example = new PropertiesExample;$example->x;

參考:

https://www.php.net/manual/zh/language.oop5.traits.php

https://learnku.com/php/t/37694

https://www..com/what-is-traits-in-php

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

標簽: PHP
相關文章:
主站蜘蛛池模板: 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 板式换网器_柱式换网器_自动换网器-郑州海科熔体泵有限公司 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂| 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 上海恒驭仪器有限公司-实验室平板硫化机-小型平板硫化机-全自动平板硫化机 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 环球电气之家-中国专业电气电子产品行业服务网站! | 北京乾茂兴业科技发展有限公司 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 |