【问题标题】:php function arguments with a variable带有变量的php函数参数
【发布时间】:2012-04-18 16:18:48
【问题描述】:

有没有办法设置带有变量的默认函数参数,例如

function example($test = 'abc', $image = $scripturl . 'abc.png')
{
        // ...
}

我想这样做的原因是因为我有源,我有全局变量设置和路径设置,以便在我需要包含 css 文件或图像时很容易抓取。

上面的代码给出了一个意外的 T_VARIABLE...

【问题讨论】:

    标签: php function global-variables arguments


    【解决方案1】:

    这是不可能的;默认参数必须是常量。

    您可以像这样轻松地模拟它:

    function example($test = 'abc', $image = null) {
        if($image === null) {
            global $scripturl;
            $image = $scripturl . 'abc.png';
        }
    }
    

    【讨论】:

    • 一些 OOP 可能有用。使 $scripturl 成为构造时设置的对象变量,那么它可以是 $this->scripturl.
    • 是的,我想这将是唯一的解决方案并在函数中使用它:/ - 感谢您的回复!
    • 不要忘记global $scripturl; 用于非超全局变量的外部变量
    【解决方案2】:

    好吧,正如错误已经说明的那样,您不能将变量用作函数签名中的(部分)默认值。

    但是,您可以做的是传递一些已知的非法值(例如null),然后检查函数内部并在需要时分配:

    function example($test = 'abc', $image = null)
    {
       global $scripturl;
       if($image === null) $image = $scripturl . 'abc.png';
       ...
    }
    

    【讨论】:

      【解决方案3】:

      没有。函数参数中的默认值必须是常量值,而不是表达式的结果:http://php.net/manual/en/functions.arguments.php#functions.arguments.default

      在解析参数时,$scripturl 无论如何都不会存在,并且总是显示为 NULL,因为在使用它之前您无法将其设为全局。

      【讨论】:

        【解决方案4】:

        默认值应该是一个常数。它们应该具有在编译时已经可用的值,而不是在运行时。

        【讨论】:

        • 我建议在编译时保持不变,因为这些设置只有在源移动时才会改变。我明白你的意思,但有没有办法按照我提议的方式做某事?不过,我总是可以在函数中添加变量......我想我会选择@ThiefMaster 解决方案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 2018-01-22
        • 2011-01-21
        • 1970-01-01
        相关资源
        最近更新 更多