2011-02-14 2 views
9

У меня есть класс в php, называемый «SEO_URL». В точке в этом классе у меня есть этотphp класс не найден, когда он включен

$class_name = "cPath_SEO_URL"; 
return $class_name::href(); 

и я получаю

Fatal error: Class 'cPath_SEO_URL' not found in 
...\includes\classes\seo.class.php on line 52 

Дело в том, я включил класс поверх SEO_URL

include_once(/path/to/my/class); 
class SEO_URL{ 

} 

и я получаю эту ошибку ,

Однако, когда я жестко программирую класс над классом SEO_URL, он работает. Так что это работает.

class cPath_SEO_URL{ 
    function cPath_SEO_URL(){} 
    function href() { return "CPathHref"; } 
} 
class SEO_URL{ 
... 
     $class_name = "cPath_SEO_URL"; 
     return $class_name::href(); 
... 
} 

и это не

include_once(/path/to/my/class); 
class SEO_URL{ 
... 
     $class_name = "cPath_SEO_URL"; 
     return $class_name::href(); 
... 
} 

Я пытаюсь это интернет-магазина.

Почему?

+0

У вас отключены предупреждения PHP? PHP будет генерировать исключение E_WARNING, если он не может найти ваш файл класса, это обычно выводится в браузер, но может быть отключено. – JamesHalsall

+2

Не обижайтесь, но мой вопрос с 90% -ным вопросом является неправильным. Вы должны использовать require_once вместо include_once, чтобы ошибка при чтении (например, неправильное имя файла/недостаточные права доступа) приводила к фатальной ошибке php вместо простого предупреждения. – phihag

+0

+1 для @phihag за то, что вы должны использовать 'require_once', а не' include_once', где ваша программа не может жить без включенного файла. Это даст вам полезные ошибки, если при попытке использовать связанные функции потребуются ошибки, а не странные ошибки. – Spudley

ответ

24

Хорошо, вы не поверите, что была проблема.

Я привык, чтобы открыть и закрыть файл PHP как этот

<? 
    ... 
?> 

не

<?php 

?> 

и файл класса был без <?php .. ?> тега, но <? ... ?> тега. Я предполагаю, что окружающая среда, в которой я сейчас работаю, требует <?php не только <?.

Он будет загружать класс, но он не будет интерпретировать его как php.

+3

Отличный совет, спасибо большое! – Wiseman

+1

Иногда вы меняете свой хостинг, и это поведение начинается. Это конфигурация 'short_open_tag' php. –

+0

Ты спасаешь мою жизнь, спасибо! –

1

С

$class_name = "cPath_SEO_URL"; 
$test = new $class_name(); 
return $test::href(); 

вы делаете статический вызов экземпляра. Это не имеет смысла.
Вместо этого вы будете хотеть сделать

$class_name = "cPath_SEO_URL"; 
return $class_name::href(); 
+0

да, это то, что я потом увижу, дело в том, что это не может найти класс, когда он включен. Однако, когда я жестко программирую класс в том же файле, все в порядке. У вас есть идеи, почему он не найдет класс, когда он включен? – billaraw

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