Переполнение методов и ссылок - PullRequest
0 голосов
/ 30 мая 2011

Я работаю над проектом, и у меня есть метод с именем View::import. Это получает два аргумента string name, reference mixed value ( Я написал таким образом, чтобы лучше понять, но это PHP! ).

В настоящее время для вызова этого метода мне нужно сделать:

    $test = 1;
    View::import('test', $test);

Работает очень хорошо, но я тоже люблю звонить :

    View::import('test', 1);

Для статических случаев, когда мне не нужно заменять исходное переменное содержимое, только «хранить на лету».

Полный метод:

    private static $globals;
    public static function import($key, &$value){
        self::$globals->{$key} = &$value;
    }

Если я поменяю на:

    public static function import($key, $value){ // no-reference

В некоторых случаях я не могу изменить исходные значения. И я не буду делать новый метод, такой как import_static или подобный.

Существует каким-то образом переполнение этот метод? (Я знаю, что PHP не поддерживает это прекрасно).

Ближайший код:

    View::import('test', $temporaryTest = 1);

Но я думаю, что это большой обходной путь , а не?

1 Ответ

2 голосов
/ 30 мая 2011

Вы можете ' переполнить ', изменив дизайн своего кода. Например сделать что-то вроде этого:

public static function import($key, $value){
    self::$globals->{$key} = $value;
    // do something with $value
    return $value;
}

и тогда вы сможете написать:

$test = 1;
$test = View::import('test', $test);

а также:

View::import('test', 1);

Ниже приведено альтернативное решение, которое фактически включает в себя создание нового, но значимого метода:

// Your old method
public static function import($key, $value){
    self::$globals->{$key} = $value;
}
// Your new method
public static function bind($key, &$value){
    self::$globals->{$key} = &$value;
}

Применяя вышесказанное, вам будет легко увидеть, что действительно происходит, когда вы вызываете конкретный метод.

Вам это помогло?

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