【问题标题】:Which is best $this or self or static when referencing const variable?引用 const 变量时,哪个是最好的 $this 或 self 或 static?
【发布时间】:2017-08-01 03:23:33
【问题描述】:

我了解到 staticself 更好,因为 self 进行后期静态绑定。

但我想知道哪个最适合引用 const 变量。

class Black
{
    const color = 'black';

    public function byThis()
    {
        return $this::color;
    }

    public function bySelf()
    {
        return self::color;
    }

    public function byStatic()
    {
        return static::color;
    }
}

我检查了所有三个吸气剂都运行良好。哪个是最好的选择? (我使用 PHP 7.0)

【问题讨论】:

  • 如果您创建一个重新定义常量的子类,它们就不一样了。 byThis()byStatic() 将返回子类的值。

标签: php static this constants self


【解决方案1】:

关键字selfstatic 这样不同:

class White {
    const color = "white";

    public function byThis()
    {
        return $this::color;
    }

    public function bySelf()
    {
        return self::color;
    }

    public function byStatic()
    {
        return static::color;
    }
}

class Black extends White
{
    const color = "black";
}

$black = new Black;
echo "byThis: " . $black->byThis() . PHP_EOL;
echo "bySelf: " . $black->bySelf() . PHP_EOL;
echo "byStatic: " . $black->byStatic() . PHP_EOL;

输出:

byThis: black
bySelf: white
byStatic: black

我希望输出为 black$black 实例,所以在我看来 static 更好。

【讨论】:

    【解决方案2】:

    PHP class constants documentation 建议将self:: 用于类中的常量。我个人会坚持下去。

    每个关键字都返回相同的值,即使该类使用另一个常量值扩展了另一个类,但 parent:: 除外,它返回父类的值:

    class White {
        const color = "white";
    }
    
    class Black extends White
    {
        const color = "black";
    
        public function byThis()
        {
            return $this::color;
        }
    
        public function bySelf()
        {
            return self::color;
        }
    
        public function byStatic()
        {
            return static::color;
        }
    
        public function byParent() {
            return parent::color;
        }
    }
    
    $black = new Black;
    echo "byThis: " . $black->byThis() . PHP_EOL;
    echo "bySelf: " . $black->bySelf() . PHP_EOL;
    echo "byStatic: " . $black->byStatic() . PHP_EOL;
    echo "byParent: " . $black->byParent() . PHP_EOL;
    

    输出将是:

    byThis: black
    bySelf: black
    byStatic: black
    byParent: white
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2012-06-12
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多