2014-01-28 1 views
1

У меня есть способ определить вложенные классы в Php, но он довольно сырой.Изящно вложенные классы в PHP - Есть предложения?

class foo { 

    function define_new_class($class, $code) { 
    if (!class_exists($class)) { 
     $definition = eval($code); 
    } 
    } 

    function bar() { 
    $new_class = "boo"; 
    $this->define_new_class($new_class, "class $new_class {}"); 
    $obj = new $new_class(); 

    echo "Current class: " . get_class($this) . "\n"; // foo 
    echo "\$obj class: " . get_class($obj) . "\n"; // boo 
    } 
} 

$foo = new foo(); 
$foo->bar(); 

Возможно ли выполнить ту же работу изящно?

+5

Вложенные классы ... Не имеет никакого смысла. Можете ли вы добавить пример, объясняющий, почему вы думаете, что вам нужно это сделать? – Marty

+1

Создание динамических классов ... iffy. Если вы (а) знаете, что должен делать этот класс, и (б) знаете, как это сделать, вы лучше начинаете писать настраиваемый класс _actual_, который делает именно это при правильной настройке. Какую проблему вы пытаетесь решить с помощью этих динамических классов? Я бы поставил много на лучший способ. В противном случае сохранение отладки станет ужасным, ужасным кошмаром. – Wrikken

+1

Мне пришлось определить один и только один класс для управления многими настраиваемыми объектами, тип которых не должен быть 'stdClass'. Применяя этот способ, я могу четко прочитать код в режиме отладки, и я действительно знаю, что это такое. – Galileo

ответ

0

Поскольку нет никакого способа определить истинные вложенные классы: вместо использования вложенного класса можно создать еще один класс, который начинается с именем OuterClass:

class OuterClass { 
    ...stufs... 
} 
class OuterClass_InnerClass { 
    ...stufs... 
} 

или использование пространств имен

class OuterClass { 
    ...stufs... 
} 
class \OuterClass\InnerClass { 
    ...stufs... 
}