当引用const变量时,哪个是$ this或self或static?

时间:2017-08-01 03:23:33

标签: php static this const self

我了解到静态优于自我,因为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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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更好。