Objetos dinámicos con PHP
by P-los on Jul.08, 2009, under Funciones, Técnicas
Con php utilizando OOP, existe una forma sencilla para utilizar la herencia y polimorfismo. La idea es instanciar un objeto teniendo el nombre de la clase en un string, ya sea constante o una variable. La forma típica de hacer esto (o al menos la unica que yo conocía) era la siguiente:
$objeto = new clase();
Si lo que queríamos es instanciar diferentes clases heredadas de una misma, o que implementen una interfase, lo que hacía era un switch para definir cual utilizar:
switch(condicion){
case 1: $objeto = new clase1(); break;
case 2: $objeto = new clase2(); break;
}
Sin embargo, despues de buscar mucho por internet, me encontré con que es posible instanciar un objeto en base a un string, esto es:
$objeto = new "clase1"();
Una vez que comprobé esto, probé con éxito el utilizar una variable para el mismo fin:
$objeto = new $nombreClase();
¿Para que puede servir esto? Estoy trabajando en un sistema para mostrar widgets, los cuales se cargan en base a la información guardada en una base de datos, con la intensión de facilitar la inclusión y administración de los mismos. El cómo lo pondré más adelante en un nuevo post, pero basicamente es lo siguiente:
<?php
function Mostrar($nombre){
require_once($nombre.".php");
$objeto=new $nombre();
$objeto->MostrarWidget();
}
?>
De esta manera, la función recibe el nombre de la clase que se desea mostrar, incluye el archivo correspondiente (suponiendo que la clase está en un archivo con el mismo nombre) y llama a una función específica.
- No related posts
October 15th, 2009 on 10:45 am
Gracias por el dato, estaba buscando como hacer esto para aplicar una pequeña injeccion de dependencia.
February 11th, 2010 on 3:12 am
Interesante, publique ayer algo similar sobre crear objetos dinamicos pero de otro modo, utilziando un factory de objetos y un __call para que quede de esta forma $obj->miclase(); o podria ser si lleva parametros la instancia $obj->miclase($a, $b)->mostrarWidget();
deberias checarlo: http://www.duartec.com/blog/tag/objetos-dinamicos/