Какая разница между self и this
В PHP self и $this — это два разных способа обращения к элементам класса: $this ссылается на текущий объект (экземпляр класса), а self — на сам класс в статическом контексте. $this используется для доступа к свойствам и методам конкретного объекта, в то время как self — для доступа к статическим свойствам, константам и статическим методам класса.
Как это работает
$this — это псевдопеременная, доступная внутри методов объекта. Она всегда указывает на текущий экземпляр класса, из которого был вызван метод. С её помощью можно обращаться к нестатическим свойствам и методам объекта, а также передавать объект как аргумент.
self — это ключевое слово, которое ссылается на класс, в котором оно используется. Оно работает в статическом контексте: внутри статических методов, при обращении к статическим свойствам и константам. self нельзя использовать для доступа к нестатическим членам класса, так как они принадлежат объекту, а не классу.
Примеры
Использование $this
class User {
public $name;
public function setName($name) {
$this->name = $name; // обращение к свойству объекта
}
public function getName() {
return $this->name; // обращение к методу объекта
}
}
$user = new User();
$user->setName('Анна');
echo $user->getName(); // АннаИспользование self
class Config {
public static $prefix = 'app_';
public static function getPrefix() {
return self::$prefix; // обращение к статическому свойству
}
}
echo Config::getPrefix(); // app_Подводные камни
selfссылается на класс, где оно написано, а не на класс в контексте наследования. Если в дочернем классе переопределить статическое свойство или метод,selfв родительском классе всё равно будет указывать на родительский класс. Для позднего статического связывания используйтеstatic.$thisнельзя использовать в статических методах, так как там нет объекта.selfможно использовать и в нестатических методах для доступа к статическим членам, но это не обязательно.
Когда использовать
$this— всегда, когда нужно работать с данными конкретного объекта: свойствами, методами, переданными в конструктор.self— для доступа к статическим свойствам, константам и статическим методам внутри класса, особенно в статических методах.
Коротко
$this— ссылка на текущий объект, используется для нестатических членов.self— ссылка на текущий класс, используется для статических членов.selfне поддерживает полиморфизм при наследовании, для этого естьstatic.- Выбор зависит от контекста: объектный или статический.
