Что лучше $ this или self или static при обращении к константной переменной?

я узнал, что статический лучше, чем сам потому что сам делает позднюю статическую привязку

Но мне интересно, что было бы лучше при ссылках 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)

3

Решение

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
2

Другие решения

Ключевые слова 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 лучше на мой взгляд.

1

По вопросам рекламы [email protected]