Установка параметров функции по умолчанию с переменной в php - PullRequest
0 голосов
/ 05 октября 2010

Я хотел бы сделать что-то вроде:

function func($var1 = 'Hello', $var2 = "{$var1} World") { echo $var2; }

Это невозможно!

Моя идея - избегать лишних строк кода внутри моей функции, но я не знаю, возможно ли это.

Кто-нибудь знает, возможна ли подобная процедура в php? Спасибо.

Ответы [ 5 ]

3 голосов
/ 05 октября 2010

Как и в других ответах, вы не можете сделать это напрямую в PHP. Мое решение этих ситуаций обычно состоит в том, чтобы имитировать поведение, используя что-то вроде этого

function func($var1 = 'Hello', $var2 = null)
{
  if ($var2 === null)
    $var2 = $var1.' Worls';
}

Но большой недостаток заключается в том, что вы копируете поведение PHP, поэтому вам придется создавать свои собственные исключения, когда переменные забыты, неправильный тип и т. Д.

2 голосов
/ 05 октября 2010

В самом php это невозможно (пожалуйста, поправьте меня, если я работаю). То, что вы хотите сделать, называется аспектно-ориентированным программированием. НО я не знаю ни одной приемлемой Aspect Framework для PHP. Например, в Java вы можете использовать AspectJ и запускать код перед вызовом определенного MyClass.method (); так что каждый раз, когда вы вызываете MyClass.method (); непосредственно перед выполнением некоторый другой код будет выполнен автоматически без добавления его в сам метод method (). это достигается путем автоматической вставки кода в нужную точку.

1 голос
/ 05 октября 2010

Я думаю, что основной ответ здесь - нет, невозможно выполнить то, о чем вы спрашиваете.

Ближайшее, что вы собираетесь получить, к той функциональности, о которой вы проситезаключается в использовании func_get_args() и связанных с ним функций (хотя, как было сказано в других ответах, вашему конкретному сценарию использования на самом деле требуется всего пара строк довольно простого кода в верхней части вашей функции).

1 голос
/ 05 октября 2010

Если вы просто хотите, чтобы $ var2 предшествовал $ var1, вы можете просто установить его в первой строке функции, например.

function func($var1 = 'Hello', $var2 = " World") { 
    $var2 = $var1 . $var2;
    echo $var2; 
}
0 голосов
/ 05 октября 2010

В PHP нет языка выражений, но вы можете использовать оператор . для объединения строк.

Попробуйте это:

function func($var1 = 'Hello', $var2 = ' Worls') { echo $var1.$var2; }

Нет, вы не можете использовать его в параметре функции. Зачем тебе это? Просто сделай это в функции тела. Лучше, если в параметрах функции нет логики. Более понятный, более разборчивый, более понятный.

Также не очень хорошо с точки зрения производительности. Вы создаете зависимость между $var1 значением по умолчанию и $var2 значением по умолчанию. Процессор может назначать значения по умолчанию в обратном порядке по любой причине (в основном, для оптимизации), но поскольку вы ввели зависимость, это невозможно сделать больше, поэтому процессор должен ждать, пока $var1 не будет разрешен, чтобы иметь возможность назначить $var2. Возьми?

В любом случае, язык не позволяет вам это делать. Но, по крайней мере, теперь у вас может быть возможная причина для этого (полностью мое предположение, я уверен, что есть и другие причины для этого).

...