【问题标题】:Using constants as default function values in PHP在 PHP 中使用常量作为默认函数值
【发布时间】:2010-11-16 18:35:48
【问题描述】:

这合法吗?

<?php

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

?>

其中MENU_DEFAULT_VALUEODP_DEFAULT_VALUE 是之前在文件中定义的常量。

【问题讨论】:

  • 是的,但是我在使用它的函数中遇到了问题,我认为这在技术上可能是可行的,但违反了最佳实践。

标签: php function constants


【解决方案1】:

你为什么不试试呢?

不过,以防万一你现在可以测试,下面的代码:

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)

所以我会说,是的,它是有效的:-)

【讨论】:

  • 在类方法的上下文中,我发现无法通过static 引用常量,而只能使用self;这个myMethod($arg1 = static::MY_CONST) 不起作用。对于这种不同的行为,您知道任何有效的解释吗?
【解决方案2】:

是的,这是合法的。

来自the manual

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

常数完全符合这个要求。

【讨论】:

  • 在为类方法参数设置默认值时,是否有任何原因/文档无法使用 static 而仅通过 self 引用常量?
  • @Kamafeather static 受到后期静态绑定的影响,使其不稳定。
【解决方案3】:

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

class MyClass
{
    const A = 1;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2011-11-18
    相关资源
    最近更新 更多