Ответ
В PHP существуют три основных модификатора видимости для свойств и методов класса:
public— доступен отовсюду: извне класса, в классах-наследниках и внутри самого класса.protected— доступен только внутри класса, где объявлен, и в его классах-наследниках.private— доступен исключительно внутри класса, где объявлен.
Начиная с PHP 7.1, модификаторы видимости можно применять и к константам класса (по умолчанию — public).
Пример, демонстрирующий область видимости:
class Example {
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
public function show() {
// Внутри класса доступны все свойства
echo $this->public; // OK
echo $this->protected; // OK
echo $this->private; // OK
}
}
class Child extends Example {
public function showChild() {
echo $this->public; // OK — public
echo $this->protected; // OK — protected доступен наследнику
// echo $this->private; // Fatal Error — private недоступен
}
}
$obj = new Example();
echo $obj->public; // OK — доступ извне
// echo $obj->protected; // Fatal Error
// echo $obj->private; // Fatal Error Ответ 18+ 🔞
А, ну вот, опять эти модификаторы видимости, ебать мои старые костыли! Смотри, тут всё просто, как три копейки, но если не понять — потом такой пиздец начнётся, что хуй с горы.
В общем, в PHP есть три главных стража доступа к твоим свойствам и методам в классе. Представь, что у тебя есть квартира (это твой класс). Так вот:
-
public— это как входная дверь нараспашку. Кто угодно может зайти: и ты изнутри, и твои дети-наследники, и вообще любой левый чувак с улицы. Всё, что объявилpublic, — всем видно, всем доступно. Прямо как холодильник на общей кухне — бери что хочешь. -
protected— это уже комната, куда пускают только семью. Ты изнутри класса можешь туда, твои прямые наследники (классы-дети) — тоже. А вот какой-нибудь внешний код, который просто создал объект, — уже нет, ему туда низя. Как личная спальня — только для своих. -
private— это сейф или личный дневник под подушкой. Только ты, и всё. Даже твои дети-наследники уже не имеют к этому доступа. Только внутри того самого класса, где это объявили. Если объявилprivateв родителе — ребёнок уже нихуя не увидит.
И да, с PHP 7.1 эту хуйню можно вешать и на константы класса, а то раньше они все по умолчанию public были, терпения ноль ебать.
Смотри на примере, а то одни слова — нихуя не понятно.
class Example {
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
public function show() {
// Внутри класса доступны все свойства
echo $this->public; // OK
echo $this->protected; // OK
echo $this->private; // OK
}
}
class Child extends Example {
public function showChild() {
echo $this->public; // OK — public
echo $this->protected; // OK — protected доступен наследнику
// echo $this->private; // Fatal Error — private недоступен
}
}
$obj = new Example();
echo $obj->public; // OK — доступ извне
// echo $obj->protected; // Fatal Error
// echo $obj->private; // Fatal Error
Видишь? Внутри родного класса (show) — можно всё, хоть private смотри. В классе-ребёнке (showChild) — public и protected работают, а на private система тебе выдаст фатальную ошибку, типа «пошёл на хуй, это не твоё». А снаружи, когда создал объект $obj, — только public и можно потрогать. Попробуешь достучаться до protected или private — получишь ту же самую фатальную ошибку, ядрёна вошь.
Короче, если хочешь, чтобы что-то было полностью инкапсулировано и никто, даже наследники, не лез — private. Если хочешь дать доступ семье (наследникам) — protected. А если похуй и пусть все используют — public. Главное — не делай всё public просто так, а то получится типичный распиздяйский код, где всё на свете можно сломать извне.