Функция PHP с переменной как значение по умолчанию для параметра
По умолчанию функция PHP использует переменные $_GET
. Иногда эту функцию следует вызывать в ситуации, когда $_GET
не задан. В этом случае я определяю необходимые переменные как параметр: actionOne(234)
Чтобы получить абстрактный код, я попробовал что-то вроде этого:
function actionOne($id=$_GET["ID"])
что приводит к ошибке:
Ошибка анализа: синтаксическая ошибка, неожиданный T_VARIABLE
Невозможно определить параметр по умолчанию с помощью переменной?
Edit
actionOne
называется "напрямую" из URL-адреса, используя структуру Yii. Обрабатывая переменные $_GET
вне этой функции, я должен был сделать это на центральном компоненте (даже это простая, незначительная функция), или мне нужно изменить структуру, что я не люблю делать.
Другим способом сделать это может быть фиктивная функция (что-то вроде предварительной функции), которая вызывается URL-адресом. Эта функция "dummy" обрабатывает проблему с переменной и вызывает actionOne($id)
.
Ответы
Ответ 1
Нет, это невозможно, как указано на странице параметров параметров функции:
Значение по умолчанию должно быть константой выражение, а не (например) a переменная, член класса или функция звоните.
Вместо этого вы можете просто передать значение null в качестве значения по умолчанию и обновить его в своей функции...
function actionOne($id=null) {
$id = isset($id) ? $id : $_GET['ID'];
....
}
... или (еще лучше) просто укажите $_GET ['ID'] в качестве значения аргумента, когда у вас нет определенного идентификатора для передачи. (т.е. обрабатывайте это вне функции.)
Ответ 2
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 );
Ответ 3
Вы должны получить этот идентификатор, прежде чем вы вызовете функцию. Проверка наличия параметра прерывает инкапсуляцию. Вы должны сделать что-то вроде этого:
if (isset($_GET["ID"])
{
$id = $_GET["ID"];
}
else
{
//$id = something else
}
function doSomethingWithID($id)
{
//do something
}
Ответ 4
Да, это невозможно.
Значение по умолчанию должно быть статической переменной:
function actionOne( $id='something') {
//code
}
Ответ 5
Легкий арахис!
(Может содержать незначительные ошибки, ошибки или опечатки!)
Вам нужна вспомогательная функция, которая будет рекурсивно вызывать основную функцию, но по умолчанию имеет значение 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));
}
Надеюсь, это поможет!
Ответ 6
Вы можете использовать постоянную переменную
define('ID',$_GET["ID"]);
function($id = _ID_){
//code
}