+4

Usando O.O. em PHP

criado por Wonder Alexandre em 02/11/2003 9:37pm
Conceitos de OO


- Classe
Classe é o termo técnico utilizado em linguagens orientadas a objetos que descreve um conjunto de dados estruturados que são caracterizados por propriedades comuns. Também pode ser interpretado como uma estrututura modular completa que descreve as propriedades estáticas e dinâmicas dos elementos manipulados pelo programa.

Pode-se definir classes de objetos como a descrição de um grupo de objetos por meio de um conjunto uniforme de atributos e serviços. Uma classe é um conjunto de objetos que compartilham as mesmas operações.

Enquanto um objeto individual é uma entidade concreta que executa algum papel no sistema como um todo, uma classe captura a estrutura e o comportamento comum a todos os objetos que são relacionados. Um objeto possui uma identidade e suas características serão definidas para a classe.

Uma classe é definida por:
· um nome da classe;
· o nome da sua superclasse;
· o nome de suas variáveis;
· os nomes e as definições de todas as operações associadas a esta classe;



- Atributos
Um atributo é um dado para o qual cada objeto tem seu próprio valor.

Atributos são, basicamente, a estrutura de dados que vai representar a classe.

Exemplo de atributos, usando a classe fila:
var $fila;
var $primeiro;
var $ultimo;



- Metodos
Métodos são declarados dentro de uma classe para representar as operações que os objetos pertencentes a esta classe podem executar.

Um método é a implementação de uma rotina, ou seja, o código propriamente dito. Pode ser comparado a um procedimento ou função das linguagens imperativas.

Exemplo de métodos, utilizando a classe fila:
function iniciar () {
$this->primeiro = 0;
$this->ultimo = 0;
}


- Objeto
O que caracteriza a programação orientada a objetos são os objetos. De um modo geral podemos encarar os objetos como sendo os objetos físicos do mundo real, tal como: carro, avião, casa, telefone, computador, etc., por isso que às vezes é dito que orientação a objetos representa os problemas mais próximo ao mundo real, dando assim mais facilidade a programação como um todo, mais isso não é sempre verdade, porque às vezes temos problemas que são extremamente funcionais. Nesses problemas funcionais é difícil representar a estrutura lógica em torno de objetos. Com isso, não são todos os problemas que giram em torno dos objetos facilmente visíveis.

De maneira simples, um objeto é uma entidade lógica que contém dados e código para manipular esses dados. Os dados são denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o código que o manipula denominamos método. Um método é uma função que manipula a estrutura de dados do objeto.

Comentários:

Mostrando 1 - 10 de 31 comentários
Tenho algumas dúvidas, primeiro não entendi pra que serve o método construtor, ele apenas inicializa outra função da classe, chamada conexao(), pra que fazer isso? E na segunda função por que sql($query) e não,
sql($this->query), qual a diferença??
05/01/2007 10:27am (~17 anos atrás)

Juan Basso disse:
Achei legal seu artigo pra quem está começando, mas eu sugeriria você colocar um construtor mais flexivel, pois, se tratando de OO, temos que tornar a classe a mais independente possível do sistema.
Ou seja, na sua classe, você pode apenas utilizar um único banco, num determinado servidor.
Veja como eu sugiro:

<?
class ConexaoMysql
{
var $servidor;
var $usuario;
var $senha;
var $banco;
var $link;

function ConexaoMysql($servidor="localhost", $usuario="root", $senha="", $banco="orcamento"){
$this->servidor = $servidor;
$this->usuario = $usuario;
$this->senha = $senha;
$this->banco = $banco;

$this->conexao();
}

...
?>


Outras colocações:
- Na hora da execucação da query, faça um if para verificar a existência ou não do link ainda, pois ele já pode ter sido desfeito (executado o método fechar) ou mesmo ter caido a conexão;
- Esse jeito que apresentei está mais flexivel, mas note que coloquei constantes ali na atribuição que caracterizam ainda o sistema, mas agora ela pode ser alterada;
- Acredito que desta maneira o pessoal que estava com dúvida em relação ao $this ficou um pouco mais claro, ou seja, podemos ter variáveis locais (dentro do método) e de classe (dentro da classe) com mesmo nome, porém, as da classe são acessadas APENAS com a utilização do $this.

Acho que é isso.
30/09/2006 1:23pm (~17 anos atrás)

Para que não haja dúvida a minha calsse conexao esta definida com letra minuscula mesmo tah bom ?
obrigadoo !
29/08/2006 12:59pm (~17 anos atrás)


Fatal error: Cannot access empty property in C:\Arquivos de programas\xampp\htdocs\PHP Orientado Objeto\conexao.php on line 15

Vou colocar o meu código também e gostaria que ajudasse!

<<Classe Conexao.php>>

<?
class ConexaoMysql
{
var $servidor = "localhost";
var $usuario = "root";
var $senha = "";
var $baco = "orcamento";
var $query = "";
var $link = "";

function ConexaoMysql(){
$this->conexao();
}
function conexao(){
$this->$link = mysql_connect($this->servidor, $this->usuario);
if (!$this->link){
die ("Error na conexão");
}elseif(!mysql_select_db($this->banco,$this->link)){
die("Erro na conexão");
}
}
function sql($query){
$this->query = $query;
if ($result = mysql_query($this->query, $this->link)){
return $result;
}else{
return 0;
}
}
function id(){
return mysql_insert_id($this->link);
}
function fechar(){
return mysql_close($this->link);
}

}
?>

<<Classe mostrar_campos.php>>

<html>
<? include("conexao.php");?>
<body>
<br>
<?
$objetoConxao = new ConexaoMysql;
echo "<select name='teste'>";
$result = $objetoConexao->sql("SELECT * FROM usuario");
echo $query;
echo $result;
while ($lista = mysql_fetch_array($result) ){
echo "<option value='$lista[login]'> $lista[login]</option>";
}
echo "</select>";
$objetoConexao->fechar();
?>
</body>
</html>

Obrigado pela atenção!!
29/08/2006 12:57pm (~17 anos atrás)

Felipe Sander disse:
eu estava olhando o modo como você declarou as variáveis e notei que assim não funciona em php4, somente utilizando um construtor, de acordo com o manual: http://br.php.net/manual/pt_BR/language.oop.php

Correto?
18/08/2006 1:06pm (~17 anos atrás)

fernando disse:
Encontrei um problemão em uma classe que eu uso e é parecida com esta que vc apresentou.

E se instanciarmos 2 objetos diferentes da mesma classe o segundo obseto sobrepões a conexão do primeiro objeto.

Exemplo:

$conexão1 = new minhaclasse("bancodedados1");
$conexão2 = new minhaclasse("bancodedados2");

Acima acontece o seguinte, o objeto $conexão2 vai sobreescrever a estring de conexão da $conexão1.

O objeto $conexão1 vai abrir o "bancodedados2" e não o "bancodedados1".

[]s
08/06/2006 12:35pm (~18 anos atrás)

É uma classe simples porém eficáz, eu estou utilizando ela e adiata bem o meu lado.
20/04/2006 7:18am (~18 anos atrás)

Rafael Torres disse:
Quando se instancia um objeto, os valores iniciais das propriedades não devem ser atribuídos diretamente a elas, como feito no script. O correto é utilizar um construtor e dentro dele atribuir os valores. Da forma como foi feito pode até funcionar, mas não é a maneira certa de fazer isso, ok!

Errado:
var $usuario = "root";

Certo (colocar dentro do construtor):
$this->usuario = "root";
27/10/2004 2:52pm (~19 anos atrás)

this e uma palavra chave que se refere a este, se vc estiver contruindo uma class e criar algums metodos e atributos e vc quer usar esses metodos e atributos dentro de outros metodos vc usa o this->nomeDoMetodo. Quer dizer q vc esta referindo ao objeto q esta na class atual. Ou seja vc esta usando o metodo q esta na class atual.

um Objeto e parecido como um variavel, sendo q cada variavel e diferente da outra. o objeto tb e a mesma coisa cada objeto e diferente do outro, sendo assim $this se refere a um unico objeto, o obejto q vc esta utilizando no momento
19/11/2003 6:34am (~20 anos atrás)

Yuri Alvim disse:
Gostaria de saber como funciona a passagem de parametros em OO. o objeto é sempre visto mesmo mudando de tela? ou é preciso passar do mesmo modo os valores(POST ou GET)?
N entendo muito bem como funciona isso...

Tb n entendo muito como funciona o $this.Por exemplo,se eu tiver instanciado 2 objetos de 2 classes diferentes...o $this se refere A QUE?
17/11/2003 1:12pm (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)