[英]get parent extends class in php
我有oop php代碼:
class a {
// with properties and functions
}
class b extends a {
public function test() {
echo __CLASS__; // this is b
// parent::__CLASS__ // error
}
}
$b = new b();
$b->test();
我有一些父類(普通和抽象)和許多子類。 子類擴展了父類。 因此,當我在某個時候實例化孩子時,我需要找出我叫什么父母。
例如,函數b::test()
將返回a
我怎樣才能獲得(從我的代碼)類a
從我的b類?
謝謝
您的代碼建議您使用parent ,這實際上是您所需要的。 問題在於神奇的__CLASS__
變量。
該文檔指出:
從PHP 5開始,此常量返回聲明的類名稱。
這就是我們所需要的,但是正如在php.net上的注釋中所指出的:
claude指出
__CLASS__
始終包含被調用的類,如果您希望讓調用該方法的類使用get_class($ this)代替。 但是,這僅適用於實例,不適用於靜態調用。
如果只需要父類,那么還有一個函數。 那個叫get_parent_class
您可以使用get_parent_class
:
class A {}
class B extends A {
public function test() {
echo get_parent_class();
}
}
$b = new B;
$b->test(); // A
如果B::test
是靜態的,這也將起作用。
注意:使用不帶參數的get_parent_class
與將$this
作為參數傳遞之間存在細微的差別。 如果將上述示例擴展為:
class C extends B {}
$c = new C;
$c->test(); // A
我們將A
作為父類(B的父類,在其中調用該方法)。 如果您始終想要您要測試的對象的最接近的父對象,則應改用get_parent_class($this)
。
class a {
// with propertie and functions
}
class b extends a {
public function test() {
echo get_parent_class($this);
}
}
$b = new b();
$b->test();
您可以使用反射來做到這一點:
代替
parent::__CLASS__;
使用
$ref = new ReflectionClass($this);
echo $ref->getParentClass()->getName();
請改用class_parents
。 它會給很多父母。
<?php
class A {}
class B extends A {
}
class C extends B {
public function test() {
echo implode(class_parents(__CLASS__),' -> ');
}
}
$c = new C;
$c->test(); // B -> A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.