Функция PHP с переменной как значение по умолчанию для параметра

По умолчанию функция 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)); } 

Надеюсь, это поможет!