ana*_*ana 13 php class parent extend
我有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();
Run Code Online (Sandbox Code Playgroud)
我有一些父类(普通和抽象)和许多子类.子类扩展父类.因此,当我在某个时刻实例化孩子时,我需要找出我叫的父母.
例如,函数b::test()将返回a
我如何(从我的代码中)获得a班级b的课程?
谢谢
Jan*_*aek 17
您的代码建议您使用父级,这实际上就是您所需要的.问题在于魔术__CLASS__变量.
该文件规定:
从PHP 5开始,这个常量返回声明的类名.
这是我们需要的,但正如在php.net上的评论中所述:
claude注意到
__CLASS__,如果你宁愿让调用方法的类使用get_class($ this),那么它总是包含它所调用的类.但是,这仅适用于实例,而不适用于静态调用.
如果你只需要父类,那么它也是一个功能.那个叫做get_parent_class
con*_*nec 16
你可以使用get_parent_class:
class A {}
class B extends A {
public function test() {
echo get_parent_class();
}
}
$b = new B;
$b->test(); // A
Run Code Online (Sandbox Code Playgroud)
如果B::test是静态的,这也可以工作.
注意:使用get_parent_class不带参数与传递$this作为参数之间存在细微差别.如果我们扩展上面的例子:
class C extends B {}
$c = new C;
$c->test(); // A
Run Code Online (Sandbox Code Playgroud)
我们得到A父类(B的父类,调用方法).如果您总是希望您正在测试的对象的最近父项,则应使用get_parent_class($this).
Ari*_*lam 11
class a {
// with propertie and functions
}
class b extends a {
public function test() {
echo get_parent_class($this);
}
}
$b = new b();
$b->test();
Run Code Online (Sandbox Code Playgroud)
Rob*_*bik 10
您可以使用反射来做到这一点:
代替
parent::__CLASS__;
Run Code Online (Sandbox Code Playgroud)
使用
$ref = new ReflectionClass($this);
echo $ref->getParentClass()->getName();
Run Code Online (Sandbox Code Playgroud)
请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
Run Code Online (Sandbox Code Playgroud)