Pergunta do dia: 3004

255 views
Skip to first unread message

Danielson Xavier

unread,
Dec 13, 2018, 5:45:19 AM12/13/18
to Rumo à certificação PHP
Não consegui passar na certificação, porém vou compartilhar algumas questões que fiquei com bastante dúvida durante a prova.

Qual a saída do script?

<?php

class Base {
    public static function whoami() {
        echo "Base ";
    }
    public static function whoareyou() {
        static::whoami();
    }
}

class A extends Base {
    public static function whoami() {
        echo "A ";
    }
    public static function test() {
        Base::whoareyou();
        self::whoareyou();
        parent::whoareyou();
        A::whoareyou();
        static::whoareyou();
    }
}

class B extends A {
    public static function whoami() {
        echo "B ";
    }
}
B::test();

A. B B B B B
B. Base A Base A B
C. Base B B A B
D. Base B A A B

wouerner

unread,
Mar 14, 2019, 8:21:58 PM3/14/19
to Rumo à certificação PHP
Video com algumas considerações:



Obrigado pela postagem.

Alfredo Braga

unread,
May 28, 2019, 10:37:25 AM5/28/19
to Rumo à certificação PHP
Qual a resposta dessa questão? Tentando resolver começou com "Base Base" e não existe nenhuma opção pra essa sequencia.... 

Danielson Xavier

unread,
Jul 4, 2019, 8:52:01 PM7/4/19
to Rumo à certificação PHP
Opa Alfredo. Você pode utilizar o php sand para testar e ver a resposta: http://sandbox.onlinephpfunctions.com/code/6ed32c78027698e785cf1cb713e83de8c5ae78ca
Ou então ver o vídeo do colega que colocou no dia 14/03.

Fabio William

unread,
Aug 26, 2019, 1:40:31 AM8/26/19
to Rumo à certificação PHP
Eu não entendi muito bem até hoje como funciona essa brincadeira de static no PHP.

Pois é muito confuso, pois em teoria o objecto estatico ele fica alocado na memoria e toda operação em cima dele seria uma sobreescrita, mas se voce analisar no caso do exemplo o objecto estatico foi chamado diversas vezes até que resultou no Base B B A B.

Por que isso aconteceu?

Vamos analisar o código

Primeiro começa a base 
 
public static function whoami() {
        echo "Base ";
    }


Logo o nosso objecto estatico whoami  começa com o  Base como echo e depois a function test() chama esse metodo estatico whoareyou que chama o whoami.

Então logo como primeiro resultado é Base. porque é o valor inicial de retorno.

Depois vamos para classe A que sobreescreve o whoami com outro valor e assim vai indo.

Como procedencia, os objetos mesmo sendo estaticos, eles vão ser chamados de acordo com o tempo de compilação, então a gente começou com BASE e depois foi A e depois foi o A de novo porque tu tem um self:: ali chamado de novo o metodo pai e por ultimo chama a ultima instância.

Eu não sei se fui claro, mas é meio esquisito mesmo.
Reply all
Reply to author
Forward
0 new messages