llamada estática a método de clase, detectada como llamada dinámica

[email protected] (Manu)
Newsgroups php.general.es
Message-ID <[email protected]>
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.
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.