Подтвердить что ты не робот

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

По умолчанию функция PHP использует переменные $_GET. Иногда эту функцию следует вызывать в ситуации, когда $_GET не задан. В этом случае я определяю необходимые переменные как параметр: actionOne(234)

Чтобы получить абстрактный код, я попробовал что-то вроде этого:

function actionOne($id=$_GET["ID"])

что приводит к ошибке:

Ошибка анализа: синтаксическая ошибка, неожиданный T_VARIABLE

Невозможно определить параметр по умолчанию с помощью переменной?

Edit

actionOne называется "напрямую" из URL-адреса, используя структуру Yii. Обрабатывая переменные $_GET вне этой функции, я должен был сделать это на центральном компоненте (даже это простая, незначительная функция), или мне нужно изменить структуру, что я не люблю делать.

Другим способом сделать это может быть фиктивная функция (что-то вроде предварительной функции), которая вызывается URL-адресом. Эта функция "dummy" обрабатывает проблему с переменной и вызывает actionOne($id).

4b9b3361

Ответ 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
}