:: novos artigos ::
|
|
|
:: novos scripts ::
|
|
|
|
|
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.
| Pergunta: |
Diferença entre $obj->func(); para obj::func(); |
| Autor: |
Ricardo Landim
|
|
|
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
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
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
|
|
|