2011-02-03 17 views
9

¿Es esta una mala práctica?PHP - definición de clases dentro de una función

gustan:

function boo(){ 
    require_once("class.moo.php"); 
} 
... 

?

+0

Posible duplicado de [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge

+0

Creo que es un duplicado de [este] (http: //stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) en realidad – greatwolf

Respuesta

7

es una mala práctica; no no lo es.

es muy probable va a conseguir ambas respuestas, y he aquí por qué:

Si utiliza __autoload (o equivalente), llamando al:

function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

es equivalente a:

function someFunc() 
{ 
    include('path/to/UndefinedClassName.php'); 
    //may be require_once, include_once, include, or require 
    //depending on how autoload is written 
    $n = new UndefinedClassName(); 
} 

Pero obtendrá un mejor rendimiento de su código si evita usar __autoload. Y para mantener su código, es mejor poner todos sus includes en la parte superior de la secuencia de comandos como lo haría para las declaraciones import en otros idiomas.

include('path/to/UndefinedClassName.php'); 
...code... 
function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

Sugeriría la consistencia. Si constantemente llama al include en las funciones, no debería tener demasiados problemas, pero elegiría las importaciones al comienzo de los archivos, o como autoloads.

3

Lo evitaría.

No es lo que otro desarrollador esperaría, y, como tal, reduciría el mantenimiento de su código.

+2

"no es lo que otro desarrollador esperaría" a menos que por supuesto, el otro desarrollador está haciendo lo mismo ... – zzzzBov

+0

@zzzzBov: Bueno, me refiero a un desarrollador "normal", por supuesto. Las prácticas no estándar son malas prácticas, IMO. –

+1

estoy de acuerdo con lo que dices en algunos niveles, pero es importante distinguir * de qué estándar estás hablando. No hay un estándar * oficial *, solo existe la forma en que otros programadores han escrito el código en el pasado. Lo más parecido a un estándar * oficial * es la especificación de codificación y la sintaxis, que es liberal por una razón. – zzzzBov

1

Así es como funcionan los cargadores de clases. Esto no es necesariamente una mala práctica.

Depende de lo que hace la función y por qué lo hace. Usar autoloading puede ser más apropiado.

0

Si tiene motivos para esto, no veo nada malo al respecto.

1

Esto es generalmente una mala práctica y debe evitarse. Probablemente deberías considerar usar un autoloader en su lugar.

+0

Como se indicó en otra parte, básicamente es así como funciona el autocargador. – Mchl

+0

Sí, pero el autocargador no tiene los mismos problemas de legibilidad/mantenimiento. – keithjgrant

Cuestiones relacionadas