я узнал, что статический лучше, чем сам потому что сам делает позднюю статическую привязку
Но мне интересно, что было бы лучше при ссылках 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)
PHP документация констант класса рекомендует использовать 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
Ключевые слова 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
лучше на мой взгляд.