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.