Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

__call solo funciona con clases instanciadas??

Estas en el tema de __call solo funciona con clases instanciadas?? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenos días a todos. Verán, tengo una clase A que me proporciona una serie de métodos, y una clase B que hace de enlace entre ...
  #1 (permalink)  
Antiguo 26/02/2008, 05:16
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
__call solo funciona con clases instanciadas??

Buenos días a todos.

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 {
  public function 
A1($message){
    echo 
"Estoy en A1: ";
    echo 
$message."\n";
  }
 
  public function 
A2($message){
    echo 
"Estoy en A2: ";
    echo 
$message."\n";
  }
}
 
class 
{
  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 
{
  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();
 
?>
Pero parece ser que __call solamente funciona con métodos de clases instanciadas.

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(); 
Estando Connection() en lugar de __call().
Código PHP:
public static function Connection(){
  if (!isset(
self::$instance)){
    
$c __CLASS__;
    
self::$instance = new $c;
  }
  return 
self::$instance->connection;

Toda la historia que he contado arriba simplemente es para hacer las llamadas así:
Código PHP:
C::A1();
C::A2();
C::A3(); 
No sé si les habré mareado mucho, quizás no me haya explicado bien, o quizás sea más simple de lo que parece.

En fin, si alguien puede echarme una mano muchas gracias ;)
  #2 (permalink)  
Antiguo 26/02/2008, 07:31
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Antigüedad: 18 años
Puntos: 3
Re: __call solo funciona con clases instanciadas??

No se puede. No sé si está en PHP 5.3, pero en PHP 6 está seguro.

Está reportado acá:

http://bugs.php.net/bug.php?id=26739

Saludos.
__________________
programación php
  #3 (permalink)  
Antiguo 26/02/2008, 08:18
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Re: __call solo funciona con clases instanciadas??

Vaya, gracias por responder ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:28.