2012-04-03 4 views
0

B.php:PHP, класс внутри класса, ошибка?

class B 
    { 
    function show() { echo 'works'; } 
    } 

A.php

class A 
{ 

public static function defineB() 
{ 
    include "b.php"; 
} 

} 


A::defineB(); 
$b = new B; 
var_dump($b); 

объекта (Б) # 1 (0) {},

если без A :: defineB(); - Неустранимая ошибка: Class 'B' не найден, если класс определения без включения другого файла - Фатальная ошибка: объявления классов могут не быть вложенными,

это ошибка?

+0

Это ошибка, но не в PHP. Вы не можете вставлять объявления классов, как указано в сообщении об ошибке. – JJJ

+1

Возможный дубликат [разрешено создание класса php внутри другого класса] (http://stackoverflow.com/questions/1583140/is-it-allowed-to-create-a-php-class-inside-another- class) – JJJ

+0

Какую версию PHP вы используете? Учитывая [этот вопрос] (http://stackoverflow.com/questions/2608432/php-nested-classes-work-sort-of), это должно работать, поскольку 'include()' включает классы в глобальное пространство имен. – CodeCaster

ответ

3

Это не ошибка, это по умолчанию и правильное поведение.

Перед использованием вы должны включить файлы. Если это дает вам слишком много боли, вы можете использовать http://www.php.net/manual/en/language.oop5.autoload.php или http://www.php.net/manual/en/function.spl-autoload-register.php в начале вашего кода.

+0

, если это не ошибка, почему у меня нет ошибки - Неустранимая ошибка: объявления классов могут быть не вложенными? почему код работает? –

0

В PHP вы не можете вставлять классы (как в Java) - так что вы получили «объявления классов не могут быть вложенными». Ключевое слово: namespace. Включение класса B из метода класса A не влияет на имя класса A, который все еще ... «A», а не «B \ A», «B.A» или sth. :)

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