Проще говоря
Public. PHP не поддерживает ничего, кроме публичных классов.
В отличие от Java/.NET/etc, нет никакой концепции пакетов, сборок, внутренних или вложенных классов. Пространства имен по существу являются просто синтаксическим сахаром, чтобы избежать IncrediblyLongClassNames, и не могут обеспечить никаких реальных изменений видимости.
Вся идея имеет гораздо меньший смысл на не скомпилированном языке, так как независимо от того, какую область вы используете, любой человек может просто взять ваш класс и объявить его публично.
PHP-7 Proviso: Анонимные Классы
PHP 7 ввел понятие anonymous classes *, позволяя определение на лету простых классов. В очень простом примере:
<?php
$foo = new class {
public function hello($what)
{
echo 'Hello ', $what, PHP_EOL;
}
};
(new $foo)->hello('world');
# Hello world
Поскольку они могут быть отнесены к переменным, они могут быть ограничены в рамках этой переменной, и розданы, как и любой другой.
В отличие от большинства языков, которые позволяют анонимным классам, в PHP они не наследуют что-либо из области, в которой они определены. Связанная документация содержит несколько примеров того, как обойти это, определив анонимный класс как наследование от родителя.
* Строго говоря, под капотом у них есть имена и, как таковые, если кто-то может запустить get_class()
на экземпляр, тогда они могут создать экземпляр своей копии, поскольку они не собираются с мусором.
PHP не поддерживает ничего, кроме общедоступных классов – iainn
Ваша догадка правильна для модификаторов методов по умолчанию, они являются общедоступными методами (совместимость с php4). Но исключение модификатора доступа приведет к уведомлению. О самом классе - все классы всегда открыты. –
Мой опыт в основном сосредоточен на PHP, поэтому мне нужно спросить: как прозрачность класса работает именно на поддерживающих его языках? Связано ли это с наследованием? –