我有以下脚本:
<?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
类型的函数,但是我认为我没有正确理解该概念,因此无法正常工作。此后,我已将此功能转换为特征-它似乎仍然提供相同的结果。
感谢您的协助。
答案 0 :(得分:2)
您需要将self::$aliases
更改为static::$aliases
,以引用B
中A
的别名。
<?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以获得更好的参考