PHP - может ли метод вернуть указатель? - PullRequest
7 голосов
/ 03 июня 2010

У меня есть метод в классе, пытающийся вернуть указатель:

<?php
public function prepare( $query ) {
    // bla bla bla

    return &$this->statement;
}
?>

Но выдает следующую ошибку:

Ошибка разбора : синтаксическая ошибка, неожиданный '&' в / home / realst34 / public_html / s98_fw / classes / sql.php в строке 246

Этот код, однако, работает:

<?php
public function prepare( $query ) {
    // bla bla bla

    $statement = &$this->statement;
    return $statement;
}
?>

Это просто природа PHP или я что-то не так делаю?

1 Ответ

13 голосов
/ 03 июня 2010

PHP не имеет указателей. PHP имеет ссылку. Ссылка в PHP - это настоящий псевдоним. Но вам они не нужны. Объекты передаются по дескриптору (поэтому они воспринимаются как ссылки) для других данных PHP использует механизм копирования при записи, поэтому нет потери памяти / производительности. Нарушение производительности возникает при использовании ссылок, поскольку они отключают копирование при записи и, следовательно, все оптимизации в движке.

Если вы действительно хотите вернуть ссылку, вы должны объявить ее в подписи:

public function &prepare( $query ) {
   // bla bla bla

   return $this->statement;
}

Но, как сказано: если оператор $ this-> является объектом, в этом нет необходимости.

См. Также http://php.net/references

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