oop — Какая видимость класса по умолчанию в PHP?

Я мог бы найти видимость по умолчанию для свойства и метода в Руководство по PHP. Но я не смог найти никакой информации относительно самого класса.

Я думаю, что это публично. Но если бы кто-то мог сослаться на ту часть, где это написано в руководстве, я был бы признателен.

3

Решение

общественного. 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() в этом случае они могут создать свою собственную копию, так как они не мусор.

8

Другие решения

PHP всегда общедоступны «по умолчанию», но наиболее точный ответ здесь заключается в том, что у классов PHP такой концепции нет.

3

По вопросам рекламы [email protected]