Поиск Картинки Карты Play YouTube Новости Почта Диск Ещё »
Войти
Спасибо за использование сервиса "Вопросы и ответы"! Сообщаем вам, что с 23 июня 2014 года Вопросы и ответы будут доступны только для чтения. После этой даты вы больше не сможете задавать вопросы, отвечать на них или писать сообщения. Все вопросы и ответы, добавленные ранее, по-прежнему останутся доступны для поиска и просмотра. Более подробную информацию можно найти в разделе вопросов и ответов.
Вопросы и ответы
Популярные ярлыки
Компьютеры (548534)
Общество (328905)
Отношения (221731)
Наука (116104)
Досуг (43872)
обратная связь (12049)
Показать все ›
22.06.09
Возможно ли в PHP определить класс внутри другого класса?
ООП
php
программирование
Такой код:

<?

 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
   {
   }
 }

?>
Примечание №1 22 июня 2009 г., 0:37:00
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", так сказать. :-)
Примечание №2 24 июня 2009 г., 19:21:13
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

Поясню, откуда взялась такая задача. Есть класс, которому для чисто внутренних целей нужен другой класс, нигде в других местах не нужный. Логично было бы описать его внутри основного класса, чтобы не засорять пространство имён и т.п. Ну да ладно, подождём нэймспэйсов, авось они решат этот вопрос...
Примечание №3 5 нояб. 2010 г., 9:19:20
Evgeniy Savichev, я, конечно, понимаю, что у нас в национальных традициях на любой вопрос, как сделать что-то, — отвечать: «А оно тебе надо?» Прошло больше года, и я понятия не имею, чего я конкретно хотел. (К тому же, за прошедшее время я имел счастье «уйти» на Python, и теперь половые трудности PHP меня мало волнуют.) Однако, взглянув на вопрос и на Ваши «размышления на тему», хочется спросить Вас: «Вы вообще об чём?»

«Я так понимаю, внутренний класс понадобился как формализованная структура, которых инстанциируется N штук и чё-то там в цикле... Так поля структуры можно формализовать и константой, и не обязательно для этого класс, обычного хеша хватит.»©

При чём здесь хеш, константы, цикл (и жуткое слово «инстанциируется»)? С тем же успехом можно сказать, что ООП вообще не нужен, т.к. всё можно написать и на «plain C». А в PHP есть такая замечательная штука, как “array”, в которую можно засунуть что угодно и жить счастливо. Так, может, ну их на фиг, эти классы?

P.S. Класс внутри класса нужен ровно по тем же причинам, по которым он нужен в любом другом месте программы. (Надеюсь, так понятнее.)
Ответы (6)
Сортировать по: голосам | времени
Нельзя добавить ответ.
Веб-поиск Google
Поиск в Картинках Google
Видео YouTube
Поиск
Введите URL
Для поиска в Интернете введите запрос в это окно.
Чтобы найти изображения, введите запрос в это окно.
Чтобы найти видеоролики, введите запрос в это окно.
Введите запрос
Вставьте URL в поле ниже:
Не удалось загрузить веб-сайт
Поиск на YouTube
Добавить ссылку на видео
Ошибка при загрузке ответов. Повторите попытку.
Некоторые ответы были скрыты.
Голоса
1
Просмотры
6977
Подписчики
1
x
©2014 Google - Условия использования - Правила в отношении веб-контента - Политика конфиденциальности