我了解到静态优于自我,因为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)
答案 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)
关键字self
和static
以此方式不同:
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
更好。