2015-02-16 3 views
0

Получение некоторой серьезной wierdness при использовании отражения для получения экземпляра класса. Код настолько прост, что я действительно не понимаю, где это происходит, кажется, что отражение меняет имя класса. Итак:ReflectionClass изменяет имя класса и вызывает фатальную ошибку

$reflect = new ReflectionClass($class); 
print_r($reflect); 
ReflectionClass Object 
(
    [name] => Db_Table_Data_Binding 
) 

return $reflect->newInstance(); // fatal error class Db_Table_Binding Not Found 

даже если завернуть его в если заявление, чтобы подтвердить:

if($class === "Db_Table_Data_Binding") 
{ 
    return $reflect->newInstance(); // fatal error class Db_Table_Binding 
} 

Брус действительно видеть, что происходит здесь ... Любая помощь будет большим.

Так что я работал, что я сделал неправильно, для тех, кто может наткнуться на этот ..

class Db_Table_Data_Binding{ 
    protected $bindTypes = array(
     "integer" => Db_Table_Binding::TYPEINT 
    ); 
} 
+0

ли класс 'Db_Table_Data_Binding' конструктор, который принимает аргументы? –

+0

Расширяет ли 'Db_table_Data_Binding'' Db_Table_Binding'? –

+0

no и no, хотя я оставил его из своего кода для краткости, есть проверка для конструктора выше if ($ reflection-> getConstructor())) – Robbington

ответ

0

Это, вероятно, потому, что конструктор вашего класса использует класс Db_Table_Binding и он находится в другом пространстве имен, и ваш автозагрузчик может» t найти определение класса.

Try в начале вашего скрипта напиши:

use NamespeceWhereUGotThisClass\Db_Table_Binding; 
+0

Я не использовал/не использовал namespacing в PHP. Я ссылался на константу класса из db_table_binding и пытался назначить ее внутри массива свойств в моем классе db_table_data_binding. , – Robbington

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