Такой код:
<?
class A
{
class B
{
}
}
?>
порождает ошибку: "PHP Parse error: syntax error, unexpected T_CLASS, expecting T_FUNCTION in C:\temp\test.php on line 5"
Является ли невозможным в PHP определить класс внутри другого класса, или есть специальный синтаксис для этого?
(Кстати, почему "expecting" именно T_FUNCTION, а не T_VAR или T_PUBLIC, например?)
P.S.: Класс внутри функции определяется без проблем:
<?
function f()
{
class C
{
}
}
?>
Примечание:
Domovoy, да, забыл сказать, конечно PHP5.
C:\>php --version
PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
Спасибо за ссылку, но, как ни странно, пример не работает, выдаёт загадочную ошибку: "PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '{' in C:\temp\test2.php on line 2".
Ну да ладно, буду знать, в каком направлении копать.
А вообще-то меня как раз интересовало такое определение, чтобы внутреннего класса вообще не видно было извне внешнего класса. "Private Class", так сказать. :-)
Примечание:
Azrael_ru, красиво говорите... но не то.
Такой код вызывает ту же ошибку:
<?
class A
{
}
class A::B
{
}
?>
PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '{' in C:\temp\test2.php on line 7
Поясню, откуда взялась такая задача. Есть класс, которому для чисто внутренних целей нужен другой класс, нигде в других местах не нужный. Логично было бы описать его внутри основного класса, чтобы не засорять пространство имён и т.п. Ну да ладно, подождём нэймспэйсов, авось они решат этот вопрос...
Примечание:
Evgeniy Savichev, я, конечно, понимаю, что у нас в национальных традициях на любой вопрос, как сделать что-то, — отвечать: «А оно тебе надо?» Прошло больше года, и я понятия не имею, чего я конкретно хотел. (К тому же, за прошедшее время я имел счастье «уйти» на Python, и теперь половые трудности PHP меня мало волнуют.) Однако, взглянув на вопрос и на Ваши «размышления на тему», хочется спросить Вас: «Вы вообще об чём?»
«Я так понимаю, внутренний класс понадобился как формализованная структура, которых инстанциируется N штук и чё-то там в цикле... Так поля структуры можно формализовать и константой, и не обязательно для этого класс, обычного хеша хватит.»©
При чём здесь хеш, константы, цикл (и жуткое слово «инстанциируется»)? С тем же успехом можно сказать, что ООП вообще не нужен, т.к. всё можно написать и на «plain C». А в PHP есть такая замечательная штука, как “array”, в которую можно засунуть что угодно и жить счастливо. Так, может, ну их на фиг, эти классы?
P.S. Класс внутри класса нужен ровно по тем же причинам, по которым он нужен в любом другом месте программы. (Надеюсь, так понятнее.)
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.