oop - использование родительских параметров в дочерней / унаследованной функции - PullRequest
0 голосов
/ 27 октября 2018

У меня есть следующий скрипт:

<?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 голосов
/ 27 октября 2018

Попробуйте использовать 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

0 голосов
/ 27 октября 2018

Вам нужно изменить self::$aliases на static::$aliases, чтобы ссылаться на псевдонимы B в A.

Смотрите здесь: 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();

Этот ответ лучше объясняет почему это работает: В чем разница между self :: $ bar и static :: $ bar в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...