Verán, tengo una clase A que me proporciona una serie de métodos, y una clase B que hace de enlace entre ésta y el resto.
De esta manera, desde el resto de clases puedo acceder a los métodos de A a través de B. Lo hago de esta manera para evitar acceder a A directamente sino sólo a través de B, en la que uso el patrón de diseño Singleton.
Como de B no permito que se puedan crear instancias accedo a su atributo que hace de unión con A a través de :: y para no repetir los métodos de A en B uso __call en éste, así con solo llamar a B con un método que éste no tenga, el método __call irá a buscarlo a A.
Código PHP:
<?php
class A {
public function A1($message){
echo "Estoy en A1: ";
echo $message."\n";
}
public function A2($message){
echo "Estoy en A2: ";
echo $message."\n";
}
}
class B {
private static $instance;
private static $connection;
public function __construct(){
$this->connection = new A();
}
public static function __call($method,$args){
if (!isset(self::$instance)){
$c = __CLASS__;
self::$instance = new $c;
}
self::$instance->connection->$method($args[0]);
}
}
class C {
public function C1(){
$b = new B();
$b->A1("hola");
//B::A1("hola");
}
public function C2(){
$b = new B();
$b->A2("adios");
//B::A2("adios");
}
}
$test = new C();
$test->C1();
$test->C2();
?>
En realidad lo que quiero hacer es lo siguiente, A es una libreria de abstracción a la Base de Datos, B una clase que proporciona una única a instancia a A (por lo del singleton) y cuando desde el resto quiero usar A hago esto:
Código PHP:
C::Connection()->A1();
C::Connection()->A2();
C::Connection()->A3();
Código PHP:
public static function Connection(){
if (!isset(self::$instance)){
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance->connection;
}
Código PHP:
C::A1();
C::A2();
C::A3();
En fin, si alguien puede echarme una mano muchas gracias ;)