У меня есть метод в классе с этой подписью:Pass новых переменное в качестве ссылки
public static function execute($query, $data = array(), &$result = NULL, $onlyOne = true)
Дело в том, чтобы выполнить SQL запрос с данными (если необходимо) и изменить результат переменного (если установлены верно) и, наконец, возвращает только первую строку, если вызывающий абонент заинтересован в ней только. Он обрабатывает ошибки SQL и т. Д., И в целом это удобная вещь, поскольку я пытаюсь уменьшить sql-запросы в сценарии до одной строки или двух (проверка результата).
Теперь у меня есть проблемы с этим:
Db::execute("query with :data", array(":data" => "data"), ($row = true));
РНР жалуется на $ строка не является переменной:
Strict standards: Only variables should be passed by reference
Как я понимаю PHP прицелы Прицел функция шириной а не в масштабе блока (например, в C++). Поэтому $row
должен быть переменной в моей области видимости и доступен для передачи в качестве ссылки (а не только для временного вызова функции). Если я объявлю это заранее, он работает, но несколько раздувает код. Есть ли способ сохранить объявление этой переменной в вызове функции следующим образом?
EDIT: добавить к принятому ответу. Ссылка может быть присвоено значение по умолчанию любой, поэтому я изменил свою подпись:
public static function execute($query, $data = array(), &$result = -1, $onlyOne = true)
, который позволяет мне назвать его помощью:
Db::execute("query with :data", array(":data" => "data"), $row);
без предварительного объявления переменной результата. Внутри я просто проверить, если $ результатов не -1 (или я могу проверить, если это NULL означающего новые пустые переменным), чтобы заполнить результат.
'($ строка = истина)' не является переменной, это назначение. Использование присвоения таким образом эквивалентно передаче * установленного значения *, aka 'true'. Это должно быть просто '$ row', и вам не нужно предварительно объявлять переменные в PHP. – Sammitch
Вы передаете только 3 аргумента, поэтому строка $ должна быть var, на которую можно ссылаться. Попробуйте: 'Db :: execute (« query with: data », array («: data »=>« data »), $ result, true);' – AbraCadaver