2011-02-14 13 views
9

Tengo una clase en php llamada "SEO_URL". En un momento en que la clase tengo esteclase php no encontrada cuando está incluida

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

y consigo

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

la cosa es que han incluido la clase en la parte superior de SEO_URL

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

} 

y me sale ese error .

Sin embargo, cuando codifico la clase en la parte superior de la clase SEO_URL, funciona. Entonces esto funciona

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

y esto no

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

Estoy tratando esto en osCommerce.

¿Por qué es eso?

+0

¿Tiene advertencias PHP desactivadas? PHP lanzará una excepción E_WARNING cuando no pueda encontrar su archivo de clase, esto generalmente se enviará al navegador pero puede estar deshabilitado. – JamesHalsall

+2

Sin ofender, pero mi conjetura del 90% es que el archivo de la clase no es correcto. Debería usar require_once en lugar de include_once para que un error al leerlo (como el nombre de archivo incorrecto/derechos de acceso insuficientes) provoque un error de php fatal en lugar de solo una advertencia. – phihag

+0

+1 para @phihag por decir que debe usar 'require_once' en lugar de' include_once' donde su programa no puede vivir sin el archivo incluido. Esto le dará errores útiles cuando el requerimiento falla en lugar de errores extraños cuando intenta usar las funciones relacionadas. – Spudley

Respuesta

24

Ok, no vas a creer lo que era el problema.

estoy acostumbrado a abrir y cerrar el archivo php como esta

<? 
    ... 
?> 

no

<?php 

?> 

y el archivo de clase era sin la etiqueta de <?php .. ?> pero la etiqueta <? ... ?>. Supongo que el entorno en el que estoy trabajando ahora quería el <?php, no el <? solamente.

Cargaría la clase pero no la interpretaría como php.

+3

¡Un gran consejo, muchas gracias! – Wiseman

+1

Algunas veces cambia el entorno de alojamiento y se inicia este comportamiento. Es la configuración de php 'short_open_tag'. –

+0

¡Me salvaste la vida, gracias! –

1

Con

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

usted está haciendo una llamada estática en una instancia. Eso no tiene sentido.
lugar que querrá hacer

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

Sí, eso es algo que veré más adelante, la cuestión es que no puede encontrar la clase cuando está incluida. Sin embargo, cuando codifico la clase en el mismo archivo, está bien. ¿Tiene alguna idea de por qué no encontrará la clase cuando está incluida? – billaraw

Cuestiones relacionadas