Вы должны импортировать свои настройки с помощью from django.conf import settings
Вы принимаете здесь php, выполняется от начала до конца, но это не вполне работает как этот:
<?php
foo(); # works
function foo(){
print "bar";
}
<?php
foo(); #dies
if( $i == 1 )
{
function foo(){
print "bar";
}
}
<?php
$i = 1;
if( $i == 1 )
{
function foo(){
print "bar";
}
}
foo(); #works
Теперь, хотя можно условно создать классы:
<?php
class A { }
class B { }
if( false ){
class C extends B {
public static function bar(){
print "baz";
}
}
}
C::bar(); # dies
Вы наклоняетесь, инстанцируют один во времени выполнения от переменной:
<?php
class A { }
class B { }
$x = 'B';
if( false ){
class C extends $x {
public static function bar(){
print "baz";
}
}
}
C::bar();
---> Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /tmp/eg.php on line 7
Существует способ сделать это с Оценкой, но Вы действительно не хотите идти туда:
<?php
class A { }
class B { }
$x = 'B';
if( true ){
$code =<<<EOF
class C extends $x {
public static function bar(){
print "baz";
}
}
EOF;
eval( $code );
}
C::bar();
$o = new C;
if ( $o instanceof $x )
{
print "WIN!\n";
}
--->barWIN!
Однако здесь существует более важный вопрос:
Какого черта был бы Вы хотеть расширить другой класс во времени выполнения
Кто-либо использующий Ваш код захочет удержать Вас и хлестать Вас для этого.
(С другой стороны, если Вы в бросание, сделайте тот прием оценки),
Я не вижу, как это было бы особенно полезно, но отвечать на Ваш вопрос... нет. Нет никакого способа динамично сделать это, потому что сгенерированный класс нужно инстанцировать, прежде чем переменная оценена (если это имеет смысл).
Помещать его просто: класс должен существовать, прежде чем код может быть правильно выполнен.
Если у Вас нет слишком многих значений за $blah, Вы могли бы расширить каждого в различном файле затем require_once "classes/foo_$blah.php"
Иначе Вы застреваете с eval()
решение... удача с этим... :)
Я предполагаю, что это для простоты, правильно? Расширение класса во время выполнения действительно является довольно сумасшедшим.
class SuperClassOne { /* code */ }
class SuperClassTwo { /* code */ }
class IntermediateClass extends SuperClassOne { /* empty! */ }
class DescendantClassFoo extends IntermediateClass{ }
class DescendantClassBar extends IntermediateClass{ }
class DescendantClassBaz extends IntermediateClass{ }
Затем когда Вы хотите изменить все Ваш DescendantClass*
классы, просто необходимо изменить то, что расширяет IntermediateClass:
class IntermediateClass extends SuperClassTwo { }
вы должны были попробовать $$
$blah = 'foo1';
class foo2 extends $$blah {
//...
}
class foo1 {
//...
}