PHP 使用 $this->variable 作为类方法参数默认值

Posted

技术标签:

【中文标题】PHP 使用 $this->variable 作为类方法参数默认值【英文标题】:PHP Using $this->variable as Class Method Parameter Default Value 【发布时间】:2013-01-31 21:57:06 【问题描述】:

好吧,这似乎是一个非常愚蠢的问题,但 php 告诉我我不能这样做,或者更确切地说是我的 IDE...

在下面的示例中,它告诉我不能使用 $this->somevar 作为该方法的默认值。

即……

class something 

public somevar = 'someval';

private function somefunc($default = $this->somevar) 






【问题讨论】:

default method argument with class property? 的可能重复项 【参考方案1】:

恐怕您的 IDE 是正确的。这是因为“默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。” — Function arguments

你需要这样做:

class something 

    public $somevar = 'someval';

    private function somefunc($default = null) 
        if ($default === null) 
            $default = $this->somevar;
        
    

这也可以使用ternary operator:

$default = $default ?: $this->somevar;

【讨论】:

你可以使用我的小库 ValueResolver 让它更紧凑 小错误 public somevar = 'someval'; 缺少 $ 并且应该是 public $somevar = 'someval'; 我复制并粘贴以重新制作它并丢失了大约 30 秒的混乱。在这里张贴,以防另一个麻木头骨出现! 哇,看起来 Victor 和我都复制了 OP,但从未注意到错误!谢谢,已修复:-)【参考方案2】:

"[函数参数的]默认值必须是常量表达式,而不是(例如) 变量、类成员或函数调用。”

http://php.net/manual/en/functions.arguments.php

【讨论】:

【参考方案3】:

在这种情况下,您可以使用我的小型库 ValueResolver,例如:

class something 

    public somevar = 'someval';

    private function somefunc($default = null) 
        $default = ValueResolver::resolve($default, $this->somevar); // returns $this->somevar value if $default is empty
    

别忘了使用命名空间use LapaLabs\ValueResolver\Resolver\ValueResolver;

还有类型转换的能力,例如如果你的变量的值应该是integer,那么使用这个:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

查看docs 了解更多示例

【讨论】:

你为什么要添加一个完整的 3rd 方包只是为了做像$default = $default ?: $this->somevar; 这样简单的事情? 几乎没有其他方法可以对其进行类型转换。另外,我打算让这个库更复杂,以避免在代码中使用isset 函数 @harryg 它还可以用于自动化框架的某些部分

以上是关于PHP 使用 $this->variable 作为类方法参数默认值的主要内容,如果未能解决你的问题,请参考以下文章

Only variables should be assigned by reference

PHP之mb_convert_variables使用

PHP 替代 if (!isset(...)) ... => GetVar($Variable, $ValueIfNotExists)

004 vs : error - This function or variable may be unsafe

php出错提示Undefined variable

PHP - 将特定的 $variable 设置为 NULL