Às vezes me aventuro em querer programar, e uma das linguagem que mais gosto é o PHP. Até pouco tempo eu não sabia que com PHP era possível programar orientado a objetos. Poiszé...
Fiz um exemplo simples para mostrar como utilizar o PHP desta forma.
Criamos 4 classes como mostra o diagrama abaixo:
Código da classe Pessoa:
<?php
include_once "Curso.php";
class Pessoa {
private $nome;
private $idade;
private $cpf;
private $curso;
public function Pessoa() {
}
public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}
public function getIdade() {
return $this->idade;
}
public function setIdade($idade) {
$this->idade = $idade;
}
public function getCPF() {
return $this->cpf;
}
public function setCPF($cpf) {
$this->cpf = $cpf;
}
public function getCurso() {
return $this->curso;
}
public function setCurso($curso) {
$this->curso = $curso;
}
}
?>
Código da classe Aluno:
<?php
include_once "Pessoa.php";
class Aluno extends Pessoa {
private $notas;
public function Aluno($notas=null, $curso=null) {
$this->setNotas($notas);
$this->setCurso($curso);
}
public function getNotas() {
return $this->notas;
}
public function setNotas($notas) {
$this->notas = $notas;
}
}
?>
Código da classe Professor:
<?php
include_once "Pessoa.php";
class Professor extends Pessoa {
private $salario;
public function Professor($salario=null, $curso=null) {
$this->setSalario($salario);
$this->setCurso($curso);
}
public function getSalario() {
return $this->salario;
}
public function setSalario($salario) {
$this->salario = $salario;
}
}
?>
Código da classe Curso:
<?php
class Curso {
private $nome;
private $disciplina;
public function Curso($nome=null, $disciplina=null) {
$this->setNome($nome);
$this->setDisciplina($disciplina);
}
public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}
public function getDisciplina() {
return $this->disciplina;
}
public function setDisciplina($disciplina) {
$this->disciplina = $disciplina;
}
}
?>
Código da página index.php:
<?php
include_once "Aluno.php";
include_once "Professor.php";
$curso = new Curso("Redes de Computadores", "Projeto de Redes");
$aluno = new Aluno();
$aluno->setCurso($curso);
$aluno->setNome("Wekler Sarmento");
$aluno->setIdade(24);
$aluno->setCPF("333333333-33");
$notas = array(0, 20, 80, -10);
$aluno->setNotas($notas);
$professor = new Professor("1,00", "Projeto de Redes");
$professor->setNome("Gilberto Sudré");
$professor->setIdade(35);
$professor->setCPF("222222222-22");
$professor->setCurso($curso);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body style="font-family:arial;">
<h4>:: Aluno</h4>
<p>
Nome do aluno: <?php echo $aluno->getNome();?><br>
Idade: <?php echo $aluno->getIdade();?><br>
CPF: <?php echo $aluno->getCPF();?><br>
Curso: <?php echo $aluno->getCurso()->getNome();?><br>
Notas na disciplina <?php echo $aluno->getCurso()->getDisciplina();?>:
</p>
<p style="margin-left: 40px;">
<?php
foreach($aluno->getNotas() as $nota) {
echo $nota."<br>";
}
?>
</p>
<h4>:: Professor</h4>
<p>
Nome professor: <?php echo $professor->getNome();?><br>
Salário: R$ <?php echo $professor->getSalario();?><br>
Curso: <?php echo $professor->getCurso()->getNome();?><br>
Disciplina: <?php echo $professor->getCurso()->getDisciplina();?><br>
</p>
</body>
</html>
Observe que para chamar um método de um objeto usamos o símbolo "->" (sem aspas). No diagrama mostrado acima as classes Aluno e Professor herdam da classe Pessoa. Para criarmos esta relação no código, usamos a palavra extends, da mesma forma como na linguagem Java. Mas antes é preciso incluir o arquivo que contém a classe Pessoa. Usamos então o método include_once. A diferença do include para o include_once é que este último somente irá carregar o arquivo uma vez.
Temos também o encapsulamento, comum em várias outras linguagens: private, public e protected. O encapsulamento modifica a visibilidade, ou acesso, de um método ou variável.
Com o private, o método ou váriável é visível apenas dentro da própria classe. O public torna visível para qualquer classe ou página. O encapsulamento protected torna visível apenas para as classes que estão relacionadas.
Bom, uma braço pessoal e quem souber de uma ferramenta online que formate o código fonte para ser postado por favor me diga =]
Um abraço