Ответ 1
Да, это законно.
Из руководство:
Значение по умолчанию должно быть константой выражение, а не (например) a переменная, член класса или функция звоните.
Константы идеально подходят к этому счету.
Является ли это законным?
<?php
function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) {
//lots_of_awesome_code
}
?>
где MENU_DEFAULT_VALUE
и ODP_DEFAULT_VALUE
- константы, определенные ранее в файле.
Да, это законно.
Из руководство:
Значение по умолчанию должно быть константой выражение, а не (например) a переменная, член класса или функция звоните.
Константы идеально подходят к этому счету.
почему бы вам не попробовать?
Тем не менее, на всякий случай вы можете проверить прямо сейчас, следующий код:
define('MENU_DEFAULT_VALUE', 10);
define('ODP_DEFAULT_VALUE', 'hello');
function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) {
var_dump($foo);
var_dump($nub);
var_dump($odp);
}
ftw();
дает этот результат:
string 'pwnage' (length=6)
int 10
string 'hello' (length=5)
Итак, я бы сказал, что да, это действительно: -)
В контексте ООП вы также можете использовать константу члена класса как значение аргумента метода по умолчанию.
class MyClass
{
const A = 1;
public function __construct($arg = self::A)
{
echo $arg;
}
}