Tengo varios patrones de fábrica estáticos en mi biblioteca de PHP. Sin embargo, la huella de memoria se está yendo de las manos y queremos reducir la cantidad de archivos necesarios durante el tiempo de ejecución. Aquí está un ejemplo de donde estamos hoy:¿Cuál es la mejor manera de incluir bibliotecas PHP cuando se usa un patrón estático de fábrica?
require_once('Car.php');
require_once('Truck.php');
abstract class Auto
{
// ... some stuff ...
public static function Create($type)
{
switch ($type) {
case 'Truck':
return new Truck();
break;
case 'Car':
default:
return new Car();
break;
}
}
}
Esto no es deseable porque Car.php Y Truck.php tendrán que ser incluidos a pesar de que sólo uno o el otro puede ser necesaria. Por lo que sé, requerir/incluir y su ..._ una vez la variación incluye las bibliotecas en el mismo ámbito que su convocatoria. ¿Es esto cierto?
Si es así, creo que esto llevaría a una pérdida de memoria:
abstract class Auto
{
// ... some stuff ...
public static function Create($type)
{
switch ($type) {
case 'Truck':
require_once('Truck.php');
return new Truck();
break;
case 'Car':
default:
require_once('Car.php');
return new Car();
break;
}
}
}
A mi me parece que en el segundo ejemplo, varias llamadas a Crear() daría lugar a múltiples requiere debido al alcance de la llamada aunque se usa el sabor require_once.
¿Es esto cierto? ¿Cuál es la mejor manera de incluir bibliotecas dinámicamente en php en un ejemplo como este?
Gracias!
¿La carga automática es un azúcar sintáctico que no requiere un alcance local? – thesmart
Cuando el archivo "requerido" contiene definiciones de clase, no hay problema con el alcance local.PHP no admite "clases internas" como Java; todas las clases se definen en el "nivel superior" del espacio de nombres actual. –