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

[email protected] (Mauricio Cuenca)
Newsgroups php.general.es
Message-ID <[email protected]>
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 u 
> na funcionalidad conocida del mismo. Lo he probado en php 5.2.12 y t 
> ambién en php 4.4.9. Se reproduce en ambos y no encuentro documentac 
> ion 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 serDir 
> igido ().  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 d 
> ebe 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.