phpextends
① php子類繼承父類內存空間問題
要明白,類跟對象實例是不一樣的。a類和b類是php聲明的類,實例化之前並不佔額外空間。當實例化成$a和$b後,這兩個實例化的對象的內部屬性是不相關的。就像兩個不同模型的車一樣,模型的樣子是繼承的,但實際出廠的每輛車都是不一樣的。
其實即使是統一模型做出來的車也是單獨的個體。比如說
$a = new a;
$b = new a;
$a和$b也是完全不相關的兩個對象實例,內部的屬性也是不一樣的。
所以當進行賦值$b->a = 13;只是改變了$b的成員a的值,對$a的成員a是沒有任何影響的。
請採納,謝謝!
② PHP類的extends問題定義類
類文件一般是不允許被直接訪問的,所以需要在類文件開頭進行判斷是否為直接路徑訪問,如果是直接訪問就設置跳轉,在其他必包含的文件里define一個常量,在類文件開頭進行判斷該常量是否存在。
③ 在php中,子類extends繼承了父類,當子類和父類同時存在構造函數__construct先執行哪一個呢
1、如果父類和子類中都沒有顯式的定義__construct,在實例化子類對象時,只會隱含的調用子類自己的構造方法。
2、如果父類中有顯式的構造方法__construct,而子類中沒有定義__construct,在實例化子類對象時,就會調用父類中的構造方法。
3、如果父類和子類中都顯式的定義了__construct,在實例化子類對象時,只會調用子類自己的構造方法(這就像是子類重構了父類的構造方法),而如果也想要調用父類的構造方法的話,就需要在子類的__construct 方法中顯式的調用,(如 __construct(){ parent::_construct();})。
(3)phpextends擴展閱讀
子類的構造函數名與子類名相同。
在子類里父類的構造函數不會自動執行。
要在子類里執行父類的構造函數,必須執行類似以下語句:
$this->[父類的構造函數名()]
類的構造函數統一命名為__construct()。
子類的構造函數名也是__construct()(也是廢話)。
在子類里父類的構造函數會不會執行,分兩種情況:
1、如子類不定義構造函數 __construct(),則父類的構造函數默認會被繼承下來,且會自動執行。
2、如子類定義了構造函數 __construct(),因為構造函數名也是__construct(),所以子類的構造函數實際上是覆蓋(override)了父類的構造函數。這時執行的是該子類的構造函數。
這時如果要在子類里執行父類的構造函數,必須執行類似以下語句:parent::__construct();
④ PHP私有屬性繼承問題
你設置了 private $Pname; 為私有變數 就導致了你的派生類是無法訪問父類的成員可以使用 protected $Pname 這樣就可以使得派生類和基類都能范圍該類的成員。 ===你初始化$student=new Student('1','zhangsan','18','男','9月23');後 不用重載parent::IT(); 這樣只能echo出父類的那句話。。你要的是覆蓋的效果 所以直接echo "$this->Pname 的工作是學生<br>"; 就可以了
⑤ php 繼承問題 私有的能不能繼承啊到底
在php中類的繼承是使用最多的一個編程特性,我們可以創建一個基類(父類)然後在這其中定義一些基本的方法,在我們的子類我們可以擴展父類中的方法這就叫覆蓋,但是如果說你在父類的某些很關鍵的方法你不能被子類繼承,因為如果子類繼承了這個方法可能給程序帶來一定的麻煩,所以我們希望這個方法是「私有」的,是不能被擴展的,這在php使用了final關鍵字來修飾你要不被繼承的方法。
php
final關鍵字可以修飾類同樣可以修改類中的方法,但它們的作用是差不多的,即如果你使用了final關鍵字來修飾了,那麼這個被修飾的類或者方法將不能被擴展或者繼承。你只能老老實實去引用它。如果你在類前面使用了final,這就是說明這個類不能使用繼承;如果你在方法前使用了php
final關鍵字,這就是說明這個方法不能被覆蓋。
簡單的說,final就是防止父類覆蓋的,加上它就不會被父類覆蓋
⑥ php繼承一個類一定要引用一下嗎
php有自動載入類的功能,但是需要遵循一定的規則,並且需要額外的代碼支持實現。
對於你說的問題,較常見的情況是b.php裡面雖然沒有引用a.php,但是c.php可能引用了a.php及b.php。只要在一個php進程中保證引用了這些文件就行,引用位置是可變的。例如在第一行引用和在第二行引用沒有區別,只要在new之前引用過就好了。但是明顯這不是值得推薦的。
⑦ php中implements和extends的區別
extends是繼承父類,只要那個類不是聲明為final或者那個類定義為abstract的就能繼承,java中不支持多重繼承,但是可以用介面來實現,這樣就要用到implements,繼承只能繼承一個類,但implements可以實現多個介面,用逗號分開就行了
⑧ PHP extends繼承多個類怎麼寫
php和java一樣,只能單繼承,想實現多繼承只能通過實現多個介面去實現
⑨ php中類的繼承是通過哪個關鍵字來實現的
php類有三種:
普通寫的class 類 用extends來繼承
抽象類abstract類 也是用extends來繼承
介面類interface類用的是implements來繼承的
⑩ thinkphp implements和extends的區別
extends 是繼承某個類
繼承之後可以使用父類的方法
也可以重寫父類的方法
implements 是實現多個介面
介面的方法一般為空的
必須重寫才能使用
extends是繼承父類,只要那個類不是聲明為final或者那個類定義為abstract的就能繼承,JAVA中不支持多重繼承,但是可以用介面來實
現,這樣就要用到implements,繼承只能繼承一個類,但implements可以實現多個介面,用逗號分開就行了