【问题标题】:oop - using parent parameters in child/inherited functionoop - 在子/继承函数中使用父参数
【发布时间】:2019-04-01 02:40:00
【问题描述】:

我有以下脚本:

<?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 类型函数,但是我认为我没有正确理解这个概念并且没有工作。从那以后,我将这个函数移到了一个特征中——它似乎仍然给出了相同的结果。

感谢您提供任何和所有帮助。

【问题讨论】:

标签: php oop inheritance


【解决方案1】:

您需要将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?

【讨论】:

  • 完美!谢谢你的回答。
【解决方案2】:

尝试像这样使用静态访问子属性

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 以获得更好的参考

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2021-08-24
    • 2012-04-11
    • 1970-01-01
    • 2023-03-27
    • 2018-03-31
    相关资源
    最近更新 更多