Я из фона Java, и я хочу использовать внутренний класс в php. Каждый раз, когда я помещаю внутренний класс, я получаю синтаксическую ошибку. Это возможно с PHP? Кроме того, как мне обратиться к внешнему классу? Получаю ли я доступ ко всем его членам данных?
<?php class OuterClass { var $x = 15; function __construct() { } class InnerClass { // error when InnerClass is static function __construct() { // error when InnerClass is static echo $x; } } } ?>
Это используется для MoveClass (как в случае перемещения) конкретной карточной игры. Я думаю, что было бы неплохо создать эти классы, потому что они не имеют смысла друг от друга. Кроме того, MoveClass должен знать о некоторых членах данных класса Game. Почему бы не сделать его функцией? Это просто слишком большой.
Редактировать:
Как насчет вложенных классов? Насколько я понимаю, они должны быть статическими? O_o
PHP не допускает внутренних классов. Если вы хотите получить доступ ко всем членам данных из родительского класса, я предлагаю вам использовать Наследование.
Возможная альтернатива:
class OuterClass { var $x = 15; function __construct() { } } class ChildClass extends OuterClass { function __construct() { parent::__construct(); } }
Вы можете объявить метод формы родительского класса, обратившись к самому классу; В PHP вы можете сделать это с помощью parent
ключевого слова. Таким образом, чтобы ссылаться на метод в контексте класса, а не на объект, мы используем ::
в отличие от ->
.
в PHP 5.4 или новее вы можете использовать PHP Traits, которые больше предназначены для множественного наследования, но могут соответствовать вашим потребностям. Из документации PHP:
A Trait похож на класс, но предназначен только для групповой функциональности тонко и последовательно. Невозможно создать экземпляр признака самостоятельно. Это дополнение к традиционному наследованию и обеспечивает горизонтальный состав поведения; то есть применение членов класса без необходимости наследования.
Как упоминалось в комментариях к этому ответу из другого вопроса , PHP-версия этой функциональности была добавлена в PHP 7. Она, похоже, не дает именно то, что вы просите. Однако он должен предоставить вам аналогичный шаблон проектирования.
Вот RFC, описывающий, как он работает: https://wiki.php.net/rfc/anonymous_classes
Как упоминалось в комментариях другого ответа, найдите на странице RFC «вложенные», чтобы увидеть пример вложенности внутри внешнего класса.
Вместо этого вы можете использовать stdClass. Вот такой вопрос: Что такое stdClass в PHP?
Вы не можете вложить такие классы.
Посмотрите раздел «extends» руководства .