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
>>