Verification: a143cc29221c9be0

Php access class by name

Как это есть сейчас

До сих пор, если вы хотите сделать определенное свойство доступным только для чтения, единственное, что вы могли сделать, - это сделать его приватным (private). Возьмем следующий пример:


class Book 
{
private $author;

public function __construct(
string $author
) {
$this->author = $author;
}

public function getAuthor(): string
{
return $this->author;
}
}

$book = new Book('Борис Акунин');

echo $book->author;
//или попытаемся присвоить новое значение
$book->author = 'Сергей Лукьяненко';

// Uncaught Error: Cannot access private property Book::$author

Если мы запустим приведенный выше пример, мы получим фатальную ошибку, которая говорит Uncaught Error: Cannot access private property Book::$author.

Используя этот подход, мы, безусловно, можем сделать свойства «только для чтения», но это своего рода «хак», и самая большая проблема с созданием private свойства заключается в том, что если вы хотите получить к нему доступ вне класса, вы должны определить геттер метод.

В нашем случае, если мы хотим получить доступ к свойству author, мы можем определить метод получения в классе следующим образом

public function getAuthor(): string 
{
return $this->author;
}

Итак, чтобы решить эту проблему, PHP 8.1 теперь изначально вводит полнофункциональные свойства только для чтения