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
>