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