在PHP中使用常量作为默认函数值

在PHP中使用常量作为默认函数值,php,function,constants,Php,Function,Constants,这合法吗 <?php function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { //lots_of_awesome_code } ?> 其中,菜单\u默认值和ODP\u默认值是先前在文件中定义的常量。为什么不试试 不过,为了以防万一,您现在可以测试以下代码: define('MENU_DEFAULT_VALUE', 10); define('ODP_D

这合法吗

<?php

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

?>

其中,
菜单\u默认值
ODP\u默认值
是先前在文件中定义的常量。

为什么不试试

不过,为了以防万一,您现在可以测试以下代码:

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)
所以我想说,是的,它是有效的:-)

是的,这是合法的

发件人:

默认值必须是常量 表达式,而不是(例如)a 变量、类成员或函数 打电话


常量非常适合该清单。

在OOP上下文中,还可以使用类成员常量作为默认方法参数值

class MyClass
{
    const A = 1;

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

是的,但是我在一个使用这个函数的函数中遇到了问题,我认为这在技术上是可能的,但与最佳实践相反。有没有任何原因/文档说明不能使用
静态
而仅仅通过
self
引用常量,当设置类方法参数的默认值时?@Kamafeather
static
受到后期静态绑定的影响,使其不稳定。在类方法的上下文中,我发现不可能通过
static
引用常量,而只能使用
self
;这个
myMethod($arg1=static::MY_CONST)
不起作用。你知道这种不同行为的任何有效解释吗?