oop-在子级/继承的函数中使用父级参数

时间:2018-10-27 16:18:10

标签: php oop inheritance

我有以下脚本:

<?php
class A {
    protected static $aliases = [];

    public static function doSomething()
    {
        foreach (self::$aliases as $column => $alias) {
           // do something
           echo "$column: $alias" . PHP_EOL;
        }
    }
}
class B extends A {
    protected static $aliases = [
        'id' => 'real_id',
        'name' => 'real_name',
    ];
}

$obj = B::doSomething(); // does nothing

如何让B继承该函数但使用它自己的参数?我试图创建一个getInstance类型的函数,但是我认为我没有正确理解该概念,因此无法正常工作。此后,我已将此功能转换为特征-它似乎仍然提供相同的结果。

感谢您的协助。

2 个答案:

答案 0 :(得分:2)

您需要将self::$aliases更改为static::$aliases,以引用BA的别名。

参见此处:https://3v4l.org/h3dP4

<?php

class A {
    protected static $aliases = [];

    public static function doSomething()
    {
        foreach (static::$aliases as $column => $alias) {
           // do something
           echo "$column: $alias" . PHP_EOL;
        }
    }
}
class B extends A {
    protected static $aliases = [
        'id' => 'real_id',
        'name' => 'real_name',
    ];
}

$obj = B::doSomething();

此答案在解释为什么起作用的方面做得更好:What is the difference between self::$bar and static::$bar in PHP?

答案 1 :(得分:0)

尝试使用static来访问子级属性

public static function doSomething()
{
    foreach (static::$aliases as $column => $alias) {
       // do something
       echo "$column: $alias" . PHP_EOL;
    }
}

看看http://php.net/manual/en/language.oop5.late-static-bindings.php以获得更好的参考