Re: [PHP-ES] llamada estática a método de cl ase, detectada como llamada dinámica

[email protected] (Manu)
Newsgroups php.general.es
Message-ID <[email protected]>
Gracias Mauricio,

tienes razon en que no es un metodo definido como estatico. Pero esta 
asi porque quiero que este metodo se pueda llamar de estas dos maneras:

Forma A)
$actor = new Actor ();
$tipos = $actor->getTipos ();

y también:

Forma B)
$tipos = Actor::getTipos ();

Si lo defino como estático, la pseudovariable $this nunca es accesible 
desde el metodo getTipos (). Y necesito que getTipos () pueda comprobar 
si se ha llamado de la Forma A o de la Forma B.

El problema esta en que llamando al metodo de la Forma B, si dentro 
consulto si $this esta creado me dice que si, detectando que se ha 
llamado de la Forma A cuando en realidad lo he llamado con la Forma B.

Mauricio Cuenca escribió:
> Actor::getTipos() no es un método estático. Debes definirlo como tal 
> en el prototipo de la función:
>
> public static function getTipos() {}
>
> -- 
> Mauricio
>
> On Mar 22, 2010, at 17:00, Manu <[email protected]> wrote:
>
>> Hola,
>>
>> tengo una situación en la que no sé si se trata de un bug de php o 
>> una funcionalidad conocida del mismo. Lo he probado en php 5.2.12 y 
>> también en php 4.4.9. Se reproduce en ambos y no encuentro 
>> documentacion al respecto.
>>
>> Me explico y os paso un código de ejemplo muy simple.
>>
>> - Tenemos dos clases Actor y Director.
>> - Creo un objeto del tipo Actor ($actor1) y llamo a su método 
>> serDirigido ().  Actor->serDirigido (); // llamada desde una 
>> instancia de Actor. No es llamada estatica.
>> - Desde este método llamo estáticamente a un método de la clase 
>> Director. Director::dirigir ();
>> - Desde este segundo método, llamo estáticamente a un método de la 
>> clase Actor. Actor::getTipos ().
>>
>> El problema está en que si compruebo si existe $this dentro de 
>> Actor::getTipos (), resulta que $this, SI EXISTE y está inicializado 
>> con el objeto que disparo esta pila de llamadas; $actor1. Yo pienso 
>> que $this no debería estar creado porque he invocado a la clase de 
>> forma estática y no como método de una instancia de la clase.
>>
>> Este es el código de ejemplo:
>>
>> <?php
>>
>> class Director
>> {
>>   public function dirige ()
>>   {
>>       // llamo a un metodo estatico de Actor
>>       $tipos = Actor::getTipos ();
>>   }
>> }
>>
>> class Actor
>> {
>>   public $actor_id;
>>
>>   public function __construct($actor_id)
>>   {
>>       $this->actor_id = $actor_id;
>>   }
>>
>>   public function serDirigido ()
>>   {
>>       Director::dirige();
>>   }
>>
>>   public function getTipos ()
>>   {
>>       if(isset($this) && get_class($this) == __CLASS__)
>>       {
>>           echo "Actor es un objeto...\n";
>>           print_r ($this);
>>       }
>>       else
>>       {
>>           echo "Actor:: es estatico ...";
>>       }
>>   }
>> }
>>
>> $actorA = new Actor ("malo Malisimo");
>> $actorA->serDirigido();
>>
>> ?>
>>
>> Sería fácil solucionar este problema. Pero necesito saber a que se 
>> debe que $this esté inicializado al llamar desde un método estático. 
>> ¿Puede deberse a un bug de php?
>> Gracias y un saludo,
>> Manu.
>>
>>
>>
>> -- 
>> PHP Spanish Localization Talk Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.