在静态上下文中获取其父类的子类名?

时间:2016-11-09 05:04:41

标签: php inheritance static-methods

考虑以下父类Parent.php

class Parent {

    protected static $className;

    public static function __static() {
        static::$className = get_called_class();
    }

    public static function doSomething1() { ... }
    public static function doSomething2() { ... }
    public static function doSomething3() { ... }
}
Parent::__static();

及其子类Child.php

class Child extends Parent { }

每个方法doSomething 1-3都需要访问$className。如果Child拨打doSomething1()$className必须为Child Model。我当然可以做到

public static function doSomething() { $className = get_called_class(); }

在每个方法中但这会导致代码重复。另外,$className最有意义地被宣布为静态。我使用的解决方法是在Parent中的类声明之后调用static class initializer。显然这也没有用,因为变量$class仍然在Parent上而不是在Child上启用,尽管使用{{1 (即后期绑定)。

长话短说,如何获得以下

static

让我稍微复杂一点:我有多个子类,Child::doSomething1(); // -> $className must be 'Child' Child::doSomething2(); // -> $className must be 'Child' Child::doSomething3(); // -> $className must be 'Child' Child1Child2,所以将Child3放在每个ChildX::__static();类中的文件结尾都是低效的。

BONUS :如果我在ChildX中致电doSomething1(),这是否意味着Child1Child2将共享一个静态属性{{1值Child3?我的猜测不是,但我很乐意听到你的观点。

对此有何想法?

0 个答案:

没有答案