Re: Utilizacion dinamica de metodos de clases
[email protected] (Carlos Medina)
| Newsgroups | php.general.es |
|---|---|
| Organization | SimplyNetworks |
| Message-ID | <[email protected]> |
Hola,
pues debes hecharle un ojo a las "Design Patterns". Te recomiendo la
fabrica. Esta clase se encargaria de instancear una classe segun el
nombre que le des. Si quieres puedes usar un singleton para obtener una
instancia de la clase fabrica
class Fabrica
{
private static $instance = null;
public function getInstance()
{
if( self::$instance === null)
{
self::$instance = new self;
}
}
public function loadClass( $classname)
{
switch( strtoupper($classname))
{
case 'CLASEESPECIFICA':
return new ClasseEspecifica();
break;
}
}
}
interface Clase
{
function enviar();
}
// cualquiera de las clases llamadas por fabrica deben tener
// en este caso el implements de la interfaz
class ClasseEspecifica implements Clase
{
// reescribir el metodo.
public function enviar()
{
echo "test";
}
}
Uso:
$fabrica = Fabrica::getInstance();
$claseEspecifica = $fabrica->loadClass( 'classeespecifica' );
$claseEspecifica->enviar();
Creo que es correcto. Lo escribi de la memoria pero si no me falla es la
manera mas elegante de solventar el problema. OOP!!!
Saludos
Am 16.10.2011 14:23, schrieb Anto:
> Hola
>
> Tengo una duda sobre las clases y queria preguntarles para saber si
> alguien ha estado en la misma situacion o como se podria hacer. Estoy
> programando unas clases, que van a tener los mismos metodos (enviar,
> eliminar, cancelar, ...) pero se llamaran de distinta forma. Queria
> para ahorra codigo, hacer unas comprobaciones en la db y segun que
> tipo sea utilizar una clase u otra. Esto lo tengo mas o menos claro,
> pero, como podria utilizar dinamicamente esto. Me explico con un
> ejemplo
>
> require_once("$nombreclase.php");
>
> $manejador = new $nombreclase(); // Aqui es la duda, que me gustaria
> llamar a la clase igual que su fichero, pero no se si asi funcionaria
> $info = $manejador->enviar('rjrjrjr' );
>
>
> vamos, a no tener que escribir el nombre fijo de la clase, sino que lo
> llame segun su php. Si me dicen que no se puede, tendre que meterlo en
> el codigo, con comprobaciones de $nombreclase y segun este, crear el
> objeto u otro :(
>
> Gracias.
>
> Saludos