在php中获取父扩展类

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)


Rif*_*fat 6

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)