2011-02-14 16 views
9

Mam klasę w php o nazwie "SEO_URL". W punkcie w tej klasie mam tenNie znaleziono klasy php, gdy jest ona dołączona.

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

i dostaję

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

Rzecz mam włączone klasę na szczycie SEO_URL

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

} 

i dostaję ten błąd .

Jednak, gdy twardo koduję klasę na górze klasy SEO_URL, działa. To działa.

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

i to nie

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

Próbuję to w osCommerce.

Dlaczego tak jest?

+0

Czy masz wyłączone ostrzeżenia PHP? PHP wyrzuci wyjątek E_WARNING, gdy nie może znaleźć pliku klasy, zazwyczaj będzie to wyjście do przeglądarki, ale może być wyłączone. – JamesHalsall

+2

Bez obrazy, ale moje 90% -owe przypuszczenie to plik klasy nie jest poprawny. Powinieneś użyć require_once zamiast include_once, aby błąd podczas odczytu (jak zła nazwa pliku/niewystarczające prawa dostępu) spowodował fatalny błąd php zamiast tylko ostrzeżenia. – phihag

+0

+1 dla @phihag, mówiąc, że powinieneś używać 'require_once' zamiast' include_once', gdzie twój program nie może żyć bez dołączonego pliku. Daje to użyteczne błędy, gdy próba użycia powiązanych funkcji nie powiedzie się, a nie dziwne błędy. – Spudley

Odpowiedz

24

Ok, nie uwierzysz, co było problemem.

jestem przyzwyczajony do otwierania i zamykania pliku php jak ten

<? 
    ... 
?> 

nie

<?php 

?> 

i plik klasy był bez znacznika <?php .. ?> ale tagu <? ... ?>. Domyślam się, że środowisko, w którym teraz pracuję, wymagało tylko <?php, a nie <?php.

Załadowałoby to klasę, ale nie interpretuje jej jako php.

+3

Wielka wskazówka, wielkie dzięki! – Wiseman

+1

Czasami zmieniasz środowisko hostingu i takie zachowanie się zaczyna. Jest to konfiguracja php 'short_open_tag'. –

+0

Uratujesz mi życie, dzięki! –

1

Z

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

robisz statyczny połączenie instancji. To nie ma sensu.
Zamiast tego będziemy chcieli zrobić

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

tak, to jest coś, co zobaczę później, chodzi o to, że nie można znaleźć klasy, gdy jest uwzględniona. Jednak, gdy twarde kodowanie klasy w tym samym pliku jest ok. Czy masz pojęcie, dlaczego nie znajdzie klasy, gdy jest uwzględnione? – billaraw

Powiązane problemy