Использование констант в качестве значений функции по умолчанию в PHP

Является ли это законным?

<?php

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) {
      //lots_of_awesome_code
}

?>

где MENU_DEFAULT_VALUE и ODP_DEFAULT_VALUE - константы, определенные ранее в файле.

Ответ 1

Да, это законно.

Из руководство:

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

Константы идеально подходят к этому счету.

Ответ 2

почему бы вам не попробовать?

Тем не менее, на всякий случай вы можете проверить прямо сейчас, следующий код:

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)

Итак, я бы сказал, что да, это действительно: -)

Ответ 3

В контексте ООП вы также можете использовать константу члена класса как значение аргумента метода по умолчанию.

class MyClass
{
    const A = 1;

    public function __construct($arg = self::A)
    {
        echo $arg;
    }
}