По умолчанию функция PHP использует переменные $_GET
. Иногда эту функцию следует вызывать в ситуации, когда $_GET
не задан. В этом случае я определяю необходимые переменные в качестве параметра: actionOne(234)
Чтобы получить абстрактный код, я попробовал что-то вроде этого:
function actionOne($id=$_GET["ID"])
что приводит к ошибке :
Ошибка анализа: синтаксическая ошибка, неожиданный T_VARIABLE
Невозможно определить параметр по умолчанию с помощью переменной?
редактировать
actionOne
называется «непосредственно» из URL-адреса, используя структуру Yii . $_GET
переменные $_GET
вне этой функции, я должен был сделать это на центральном компоненте (даже это простая, незначительная функция), или мне нужно изменить структуру, что я не люблю делать.
Другим способом сделать это может быть фиктивная функция (что-то вроде предварительной функции), которая вызывается URL-адресом. Эта «фиктивная» функция обрабатывает проблему-переменную и вызывает actionOne($id)
.
Нет, это невозможно, как указано на странице параметров аргументов Function :
Значение по умолчанию должно быть константным выражением, а не (например) переменной, членом класса или вызовом функции.
Вместо этого вы можете просто передать значение null в качестве значения по умолчанию и обновить его в своей функции …
function actionOne($id=null) { $id = isset($id) ? $id : $_GET['ID']; .... }
… или (еще лучше) просто укажите $ _GET ['ID'] как значение аргумента, когда у вас нет определенного идентификатора для передачи. (т. е. обрабатывайте это вне функции.)
function actionOne( $id=null ) { if ($id === null) $id = $_GET['ID']; }
Но, возможно, я сделаю это за пределами функции:
// This line would change, its just a for instance $id = $id ? $id : $_GET['id']; actionOne( $id );
Вы должны получить этот идентификатор, прежде чем вы вызовете функцию. Проверка наличия параметра прерывает инкапсуляцию. Вы должны сделать что-то вроде этого:
if (isset($_GET["ID"]) { $id = $_GET["ID"]; } else { //$id = something else } function doSomethingWithID($id) { //do something }
Да, это невозможно.
Значение по умолчанию должно быть статической переменной:
function actionOne( $id='something') { //code }
Легкий арахис!
(Может содержать незначительные ошибки, ошибки или опечатки!)
Вам нужна вспомогательная функция, которая будет рекурсивно вызывать основную функцию, но по умолчанию имеет значение NULL:
Неверно: function actionOne($id=$_GET["ID"])
Правильно:
function actionOne($id) {...} function actionOnewithID($id=NULL) { if (NULL==$id){actionOne($_GET["ID"]);} else {actionOne($id); }
И если вам нужно вернуть значение:
function actionOne($id) {...} function actionOnewithID($id=NULL) { if (NULL==$id){return(actionOne($_GET["ID"]));} else {return(actionOne($id)); }
Надеюсь, это поможет!