falcao544 11 Denunciar post Postado Junho 30, 2012 O titulo do topico ja diz tudo. Eu ja li alguns artigos a respeito, mas ainda nao sei direito qual usar quando eu uso extends e etc... Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Junho 30, 2012 Estou meio preguiçoso hoje, vou responder me curtinho... self dentro de uma classe para invocar métodos ou propriedades estáticas parent é o mesmo que self, porém para quando o método ou propriedade se encontra em sua classe-pai. Essa keyword também admite que o construtor da classe-pai seja invocado estaticamente, mesmo que este não seja estático: abstrac class AbstractClass { public functtion __construct() { echo 'Cruel World'; } } class SayHello extends AbstractClass { public function __construct() { echo 'Hello! '; parent::__construct(); } } Ao instanciar SayHello você verá Hello! Cruel Worldpois apesar de sobrescrever o construtor, você o está invocado depois de fazer alguma coisa, no caso, ecoar o prefixo da frase. Pode ser que os outros métodos mágicos também devam ser invocados, quando justificado fazê-lo, utilizando parent. Não confirmo porque nunca fiz. $this é quase o mesmo que self e parent juntos, porém, para métodos e propriedades não-estáticos. Lembrando novamente que o construtor, mesmo que não estático deve ser invocado utilizando parent. Usar self para invocar o construtor dentro da própria classe, como em Singletons, não faz serntido nenhum, sendo que é possível usar o new Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Junho 30, 2012 Hum! Muito obrigado! Entao se eu quiser chamar um metodo dentro da classe aonde ele foi declarado, eu so poderia usar usar self se ele fosse estatico, caso contrario, so usando $this, correto? E quando eu devo declarar um metodo como estatico? Eu li que se deve declarar um metodo como estatico, quando ele eh muito usado e assim se evita uma linha de codigo, que seria usada para instanciar a classe, mas nao achei que isso fizesse muito sentido. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Stratocaster 85 10 Denunciar post Postado Junho 30, 2012 Acho que esse exemplo esclarece o conceito de propriedade estática. Se puder testar. <?php class Teste{ public static $contador; function __construct(){ self::$contador++; } } $t1 = new Teste(); $t2 = new Teste(); echo Teste::$contador; ?> Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Junho 30, 2012 Obrigado pelo exemplo, mas eu ja entendi o conceito de propriedades estaticas, o que eu nao consegui entender muito bem foi em relacao aos metodos estaticos! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 30, 2012 métodos estáticos são úteis quando você que chamar um método de uma classe sem instanciá-la. Por exemplo, se você possui uma classe com alguns métodos auxiliares, que executam ações que não dependem de outros dados da classe, pode defini-lo como estático. Outro uso comum é nos padrões Singleton e Factory, que tem um método geralmente chamado getInstance(), que retorna sempre uma instância única da classe. Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Junho 30, 2012 Mas Beraldo, eu li que mesmo o metodo nao sendo estatico, tem como chama-lo sem instanciar a classe! E ai? Isso eh meio que uma falha da equipe do PHP ou tem algum uso? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 30, 2012 Mas Beraldo, eu li que mesmo o metodo nao sendo estatico, tem como chama-lo sem instanciar a classe! Nunca vi isso. Onde leu? Mostre um exemplo E ai? Isso eh meio que uma falha da equipe do PHP ou tem algum uso? Isso não é do PHP. Toda linguagem que suporte OO tem isso. Se fosse uma falha, seria uma falha da OO, não do PHP Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Junho 30, 2012 Nunca vi isso. Onde leu? Mostre um exemplo <?php class aclass { function anonstatic() { echo 'non static'; } static function astatic() { echo 'static'; } } $aobj = new aclass(); aclass::anonstatic(); //it works. $aobj->astatic(); //it works too. ?> Testei esse codigo localmente usando o servidor nativo do PHP 5.4 e obtive esse retorno: Strict Standards: Non-static method aclass::anonstatic() should not be called statically in C:\ProgramFiles\Projeto\NetBeans\example.php on line 14 non staticstatic Mesmo acusando o erro ele imprime na tela a mensagem! Eu achava que o php retornaria um erro do tipo fatal! Isso não é do PHP. Toda linguagem que suporte OO tem isso. Se fosse uma falha, seria uma falha da OO, não do PHP Aonde eu li, eu entendi que essa possibilidade era somente no PHP! Aqui esta o link -> http://bytes.com/topic/php/answers/495206-static-method-vs-non-static-method Esta escrito no segundo paragrafo da primeira resposta! Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Julho 1, 2012 Quanto mais eu conheço o PHP, mais eu veto a bagunça que ele é :lol: Isso é só no PHP, mesmo, que eu saiba. Pensando assim, realmente não faz muito sentido ter um método estático... bicho doido Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Julho 1, 2012 Pois é! Haha! Sera que isso se deve ao fato de o PHP ter sido criado como uma linguagem estruturada e assim essas falhas se devem a esse processo de transição para OO? O tipo de erro retornado deveria ser um do tipo fatal? Outra dúvida: é um método estático pode ser chamado através de uma instância da classe à qual ele pertence? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites