Publicidade   
 você está aqui: phpbrasil.com    faqs    faq  
 
:: novos artigos ::

:: recomendado ::

Fundamentos de PHP

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

rafaelgh2005
Pontos: 3092

FAQs

Essa seção tem como objetivo criar um histórico de perguntas ou tópicos frequentemente perguntados para ajudar a comunidade a documentar as necessidades dos desenvolvedores iniciantes e também experientes.


Procura:      
Lista de Categorias  |  Envie a sua Pergunta  |  Entre em Contato Conosco
Pergunta: Diferença entre $obj->func(); para obj::func();
Autor: Ricardo Landim
Vote aqui!
Média de Votos Atual: 9.50
Total de Votos: 4
Nota:   


Respostas

Resposta contribuída por Ricardo Landim em 2002-07-20 15:02:03
 
Qual a diferença de se usar esses codigos abaixo

<?
class obj{
function func(){
$var="teste";
return $teste;
}
}
/* Caso 1 */
$obj=new obj();
echo $obj->func();

/*Caso 2*/
echo obj::func();

?>

Alem da sintaxe existe algo diferente ???
Resposta contribuída por Italo Marcelo de O. Costa Esse usuário pertence aos 10 usuários mais ativos do site em 2002-07-22 09:22:25
 
Não tenho muita certeza.... mas acho que no caso 1 vc está criando o objeto novo.... e no segundo vc o instancia.
Resposta contribuída por Ricardo Landim em 2002-07-22 19:46:12
 
Fiquei sabendo que havia uma mudança no acesso de variaveis globais... o acesso a elas não muda ???
Resposta contribuída por Eduardo Dias em 2002-08-13 09:42:31
 
Na primeira situação é instanciado um objeto e assim você acessa os métodos daquele objeto.

Já no segundo caso você acessa os métodos diretamente na classe, podendo ter a seguinte situação:

objeto instanciado
$meuobj = new NomeClasse();
$meuobj->metodo();

diretamente na classe
NomeClasse::metodo();


Qualquer dúvida entre em contato,

Eduardo Dias
Resposta contribuída por Daniel Melo em 2002-09-15 13:54:10
 
Esta confusão acontece porque o modelo de objetos do PHP é muito falho.

A sintaxe $objeto->metodo() seria utilizado para chamar metodos de instancia. Metodos que dizem respeito a um determinado objeto. Tecnicamente falando, metodos que tenham a referencia $this (o proprio objeto) em seu corpo.

A sintaxe Classe::metodo() seria utilizado para chamar metodos de classe, ou metodos estaticos. Estes metodos nao dizem respeito a nenhuma instancia em particular (nao tem referencia a $this no corpo).

Acontece, que o PHP nao permite definir se os metodos sao estaticos ou de instancia na declaracao de classes. Ai comeca a confusão.
O PHP permite voce utilizar qualquer uma das sintaxes para chamar um metodos em uma classe.

1 - Se o metodo for de instancia :

Voce tem usar :
$obj = new Classe;
$obj->metodo();

Mas tambem pode usar :
$obj = new Classe;
$obj::metodo();

2 - Se o metodo for de classe (ou estatico) :

Voce tem que usar

Classe::metodo();

Se voce usar Classe::metodo(), em um metodo de instancia, vai dar erro.

Este apenas um dos topicos confusos do modelo de objetos do PHP, que finalmente vai ser corrigido no Zend Engine 2 (suposto PHP5).


Resposta contribuída por Sebastião Farias Júnior em 2003-06-28 14:47:39
 
No primeiro vc cria um instância do objeto, já no segundo você acessa diretamente qualquer metodo que esta na clase.
ex.:
<?php
class teste{
var nome;
function teste($a){
echo "Teste $a";
$this->nome=$a;
}
?>
<?php
class teste2 extends teste{
var $p;
function teste2($a){
teste::teste();
$this->a = $a;
}
}
?>
Resposta contribuída por Alessander Thomaz Esse usuário pertence aos 10 usuários mais ativos do site em 2004-04-10 06:22:54
 
Na verdade o php é falho em OOP até a versão 4, na 5 está bem interessante o suporte a OOP, se bem que isso tudo é bastante questionável, se é ou não é importante, assim como a herança multipla que o Java não tem e dizem que é um dos principios básicos de orientação a objetos.

Cada louco com suas loucuras :-) ficar discutindo se herança multipla é ou não necessário, é uma falta do que fazer, risos.

O que importa é que a linguagem tem ou não tem. E isso é um limitante.

Abraços,
Alessander
Resposta contribuída por Rômulo Manoel de F. Barros em 2004-12-27 14:53:43
 
Em relação a métodos eu não sei... mas em relação a classes, quando herdamos uma da outra, a mesma acessará o construtor da classe pai.
Ex:

Observe a linha "Pessoa::Pessoa($nome,$idade,$endereco,$telefone);". É aqui onde invocamos o construtor da classe pai.

<?php

class Pessoa{

var $nome;
var $idade;
var $endereco;
var $telefone;

//Construtor de Pessoa
function Pessoa($nome,$idade,$endereco,$telefone){
$this->nome=$nome;
$this->idade=$idade;
$this->endereco=$endereco;
$this->telefone=$telefone;
}

//Acessores
function getNome(){
return $this->nome;
}

function getIdade(){
return $this->idade;
}

function getEndereco(){
return $this->endereco;
}

function getTelefone(){
return $this->telefone;
}
}
?>




<?php

require_once("Pessoa.php");

class PessoaFisica extends Pessoa{

var $cpf;
//Construtor
function PessoaFisica($nome,$idade,$endereco,$telefone,$cpf){
Pessoa::Pessoa($nome,$idade,$endereco,$telefone);
$this->cpf=$cpf;
}

//Acessor
function getCpf(){
return $this->cpf;
}
}
?>

 
Imprimir  |  Enviar para um Amigo


 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 0.87 segundos