首頁 後端開發 php教程 php5.4之前版本如何使用非trait方法實作多重繼承功能

php5.4之前版本如何使用非trait方法實作多重繼承功能

Aug 26, 2017 am 10:13 AM
php5.4 trait 多繼承

像PHP,Java這類語言都只支援單繼承,但有時候我要需要用到多繼承​​,我可可以模擬出多繼承,當然php5.4以後的trait也能更好的解決多繼承問題。

下面我們介紹如何使用非trait方法實作多重繼承功能,

本段程式碼經本人測試可用,程式碼可供參考

程式碼如下:

<?php
/*
多继承基类
注:要想实现类多继承,必需首先继承此基类
*/
        
class multi_extends{
        
        public function __construct(){
                $this->_init_extends();
        }
        
        protected function _init_extends(){
                if(property_exists($this,&#39;_extends&#39;))
                {
                        $extends=&$this->_extends;
                        foreach($extends as $class)
                        {
                                $this->_extends($class);
                        }
                }
        }
        
        public function _extends($class_name){
                //分析目标
                $ref = new ReflectionClass($class_name);
                
                //继承公共属性
                $property_list=$ref->getProperties(ReflectionProperty::IS_PUBLIC);
                foreach($property_list as $property)
                {
                        $property_name=$property->name;
                        $property_value=$property->getValue(new $class_name);
                        if($property_name===&#39;_extends&#39;)
                        {
                                foreach($property_value as $c)
                                {
                                        $this->_extends[]=$c;
                                }
                        }else{
                                if(!property_exists($this,$property_name))
                                {
                                        $this->{$property->name}=$property_value;
                                }
                        }
                }
                
                //继承公共方法
                $method_list=$ref->getMethods(ReflectionMethod::IS_PUBLIC);
                foreach($method_list as $method)
                {
                        $this->_extends_method[$method->name]=$method->class;
                }
        }
        
        function __call($m,$a){
                if($c=$this->_extends_method[$m])
                {
                        eval("$c::$m(".&#39;$a&#39;.");");
                }
        }
}
header(&#39;content-type:text/html;charset=utf-8&#39;);
class a{
        public $a=5;
        
        public function say_name(){
                echo &#39;我叫&#39;.$this->name.&#39;<br>&#39;;
        }
}
class b{
        function say_age(){
                echo &#39;我今年&#39;.$this->age.&#39;岁<br>&#39;;
        }
        
}
class c extends multi_extends{
        public $_extends=array(&#39;a&#39;,&#39;b&#39;);
        
        
        public function say_hellow(){
                echo &#39;hellow &#39;.$this->name.&#39;<br>&#39;;
        }
}
class d{
        function say_goodbye(){
                echo &#39;goodbye &#39;.$this->name.&#39;<br>&#39;;
        }
        
}
class persion extends multi_extends{
        public $_extends=array(&#39;c&#39;,&#39;d&#39;);
        
        
        public $name="熊宝山";
        public $age="20";
        
        
        
}
//执行继承后的方法
$o=new persion();
$o->say_name();
$o->say_age();
$o->say_hellow();
$o->say_goodbye();
登入後複製

以上就是本人實作的php多繼承類別的功能,程式碼僅供學習,正式專案中請使用php5.4的trait功能。

文章地址:http://www.php.cn/php-weizijiaocheng-377482.html

學習程式設計就來PHP中文網    www.php.cn

#~~~~

#

以上是php5.4之前版本如何使用非trait方法實作多重繼承功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP trait DTO:簡化資料傳輸物件的開發 PHP trait DTO:簡化資料傳輸物件的開發 Oct 12, 2023 am 09:04 AM

PHPtraitDTO:簡化資料傳輸物件的開發引言:在現代的軟體開發中,資料傳輸物件(DataTransferObject,簡稱DTO)扮演了重要的角色。 DTO是一種純粹的資料容器,用於在層與層之間傳遞資料。然而,在開發過程中,開發人員需要編寫大量的相似的程式碼來定義和操作DTO。為了簡化這個過程,PHP引入了trait特性,我們可以利用trait特

C++ 友元函數詳解:友元函數在多重繼承中的作用? C++ 友元函數詳解:友元函數在多重繼承中的作用? Apr 29, 2024 pm 06:39 PM

友元函數允許非成員函數存取私有成員,並在多重繼承中發揮作用,允許衍生類別函數存取基底類別的私有成員。

深入了解PHP trait DTO的設計模式與實踐 深入了解PHP trait DTO的設計模式與實踐 Oct 12, 2023 am 08:48 AM

深入了解PHPtraitDTO的設計模式與實務Introduction:在PHP開發中,設計模式是不可或缺的一部分。其中,DTO(DataTransferObject)是一種常用的設計模式,用於封裝資料傳輸的物件。而在實現DTO的過程中,使用trait(特徵)可以有效提高程式碼的複用性和靈活性。本文將深入探討PHP中traitDTO的設計模式與實踐

PHP trait DTO:最佳化資料傳輸過程的關鍵利器 PHP trait DTO:最佳化資料傳輸過程的關鍵利器 Oct 12, 2023 pm 03:10 PM

PHPtraitDTO:優化資料傳輸過程的關鍵利器,需要具體程式碼範例簡介:在開發過程中,資料傳輸是一個非常常見的需求,尤其是在不同層級之間傳遞資料時。在傳輸這些資料過程中,我們常常需要對資料進行處理、驗證或轉換,以滿足不同的業務需求。為了提高程式碼的可讀性和可維護性,我們可以使用PHPtraitDTO(DataTransferObject)來最佳化

PHP trait DTO:實現資料傳輸物件的簡潔與彈性 PHP trait DTO:實現資料傳輸物件的簡潔與彈性 Oct 12, 2023 am 10:21 AM

PHPtraitDTO:實現資料傳輸物件的簡潔性與彈性引言:在PHP開發過程中,經常會涉及資料的傳輸與處理。而傳輸物件模式(DataTransferObject,簡稱DTO)是一種設計模式,它用於將資料在不同層之間傳輸。在傳輸過程中,DTO透過封裝資料、提供公共存取方法來簡化資料的操作。本文將介紹如何使用PHPtrait來實現DT

使用PHP trait DTO實現高度可自訂的資料傳輸框架 使用PHP trait DTO實現高度可自訂的資料傳輸框架 Oct 12, 2023 pm 12:46 PM

使用PHPtraitDTO實現高度可自訂的資料傳輸框架隨著網站和應用程式變得越來越複雜,資料傳輸變得越來越重要。在PHP中,透過使用資料傳輸物件(DataTransferObject,簡稱DTO)來處理資料傳輸可以大幅簡化程式碼,並提高可維護性和擴展性。本文將介紹如何使用PHPtrait和DTO實現一個高度可自訂的資料傳輸框架,並提供相應的程式碼範例。

PHP trait DTO:優雅的資料傳輸物件模式 PHP trait DTO:優雅的資料傳輸物件模式 Oct 12, 2023 am 08:34 AM

PHPtraitDTO:優雅的資料傳輸物件模式概述:資料傳輸物件(DataTransferObject,簡稱DTO)是一種設計模式,用於在不同層之間傳輸資料。在應用程式中,經常需要從資料庫或外部服務獲取數據,並在應用程式的不同層之間進行傳遞。 DTO模式可以讓資料傳輸更加簡潔、清晰,同時也便於擴展與維護。在PHP中,我們可以使用trait來實現DTO

PHP trait DTO:優化資料傳輸流程的關鍵工具 PHP trait DTO:優化資料傳輸流程的關鍵工具 Oct 12, 2023 am 09:27 AM

PHPtraitDTO:優化資料傳輸流程的關鍵工具,需要具體程式碼範例在開發過程中,資料的傳輸是一個十分關鍵的環節。如何有效率地傳輸數據,成為了開發者需要解決的難題之一。 PHP語言中,使用traitDTO(DataTransferObject)可以優化資料傳輸流程,提高資料傳輸的效率。本文將介紹什麼是traitDTO,以及如何使用它來最佳化資料傳輸流

See all articles