2016-07-19 6 views
3

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

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

+6

PHP не поддерживает ничего, кроме общедоступных классов – iainn

+1

Ваша догадка правильна для модификаторов методов по умолчанию, они являются общедоступными методами (совместимость с php4). Но исключение модификатора доступа приведет к уведомлению. О самом классе - все классы всегда открыты. –

+0

Мой опыт в основном сосредоточен на PHP, поэтому мне нужно спросить: как прозрачность класса работает именно на поддерживающих его языках? Связано ли это с наследованием? –

ответ

4

Проще говоря

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

2

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

Смежные вопросы