+2

Classes e Objetos (PHP5) - Visibilidade, Construtores e Destrutores

criado por John Marques em 13/08/2007 6:17pm
Então tá agora que sabemos dos conceitos vamos para o código.

<?php
class operacoes
{
    // Membros
    // aqui declaramos os tipos dos membros
    public $v1;
    public $v2;
    protected $res;
    
    /*
    Construtor:
    Nele setamos os valores dos membros de $v1 e $v2 
    */
    function __construct()
    {
        $this->setV1(10);
        $this->setV2(3);
    }
    
    //Destrutor
    function __destruct()
    {
        echo "eu sou um destrutor";
    }
    
    //Um método
    public function soma()
    {
        return $this->res = $this->v1 + $this->v2;
    }
    
    /*
    Observe que na função subtração eu não uso a palavra-chave 
    public, pois o PHP5 entende que qualquer método que não 
    seja setado sua visibilidade terá como visão total ou seja 
    será "public", então tanto faz colocarmos public ou não 
    colocar nada na frente de um método que vai dar na mesma, 
    ja no caso do protected e private é necessário que seja setado.
    */
    function subtracao()
    {
        return $this->res = $this->v1 - $this->v2;
    }
    
    protected function multiplicacao()
    {
        return $this->res = $this->v1 * $this->v2;
    }
    
    protected function divisao()
    {
        return $this->res = $this->v1 / $this->v2;
    }
    
    // Privamos o método para o uso somente da classe operacoes.
    private function modulo()
    {
        return $this->res = $this->v1 % $this->v2;
    }
    
    public function ret_modulo()
    {
        return $this->modulo();
    }
    
    public function setV1($valor)
    {
        $this->v1 = $valor;
    }
    
    public function setV2($valor)
    {
        $this->v2 = $valor;
    }
    
    public function getV1()
    {
        return $this->v1;
    }
    
    public function getV2()
    {
        return $this->v2;
    }
}
?>

Crie duas classes para explicar a visibilidade dos métodos pois se fosse somente explicado a visiblidade dos membros, era necessário somente a classe operacoes.

<?php
class exec_op extends operacoes
{
    //determino o membro como privado
    private $r;
    
    function __construct()
    {
        //o comando abaixo determina que o construtor da classe
        //pai deve ser usado
        parent::__construct();
    }
    
    function __destruct()
    {
        //Da mesma forma que no construtor desta classe..
        //o destrutor do pai deve ser usado
        parent::__destruct();
    }
    
    public function print_soma($v1 = "", $v2 = "")
    {
        if ($v1 != "") {
            $this->setV1($v1);
        }
        
        if ($v2 != "") {
            $this->setV2($v2);
        }
        
        $this->r = $this->soma();
        $this->imp();
    }
    
    public function print_modulo($v1 = "", $v2 = "")
    {
        if ($v1 != "") {
            $this->setV1($v1);
        }
        
        if ($v2 != "") {
            $this->setV2($v2);
        }
        
        $this->r = $this->ret_modulo();
        $this->imp();
    }
    
    public function imp()
    {
        echo $this->r."<br>";
    }
}

$exec = new exec_op();

// Retornará 13
$exec->print_soma();

//Retornará 1
$exec->print_modulo();

// Gera um erro "Fatal error: Call to private method 
// operacoes::modulo() from context '' in operacoes.php on line xx"
echo $exec->modulo();

// Gera um erro "Fatal error: Call to protected method
// operacoes::divisao() from context '' in operacoes.class.php on line xx"
echo $exec->divisao();

// Retornará 7
echo $exec->subtracao();

// Gera um erro "Fatal error: Call to protected method 
// operacoes::multiplicacao() from context '' in operacoes.class.php on line 122
echo $exec->multiplicacao();
?>

Galera muito obrigado. Tomara que eu tenha ajudado, eu acredito que este artigo serve para ajudar aqueles que estão iniciando em OOP no PHP5.

Abraço a todos,
John Marques

Comentários:

Mostrando 1 - 10 de 10 comentários
Claudio disse:
Boa noite, por gentileza poderia conferir o link das páginas. Retornou o seguinte erro:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@phpbrasil.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
07/04/2009 2:37pm (~15 anos atrás)

John Marques disse:
Gabriel,

Muito obrigado, fico feliz que tenha gostado do artigo
prometo que o próximo artigo que publica te enviarei por e-mail.

Abraços.

John Marques

12/12/2008 5:23am (~15 anos atrás)

Inclusive aprendi que não precisa criar Metodos set e get se não tiver que usa-los diretamente. Eu sempre declarei metodos set e get por instinto, pois na materia que tive na faculdade, JAVA, eu seeeeeeempre tinha que implementar todos os metodos set e get, e pra mim era um padrão, coisa do tipo. Mas com o tempo, lendo sobre o assunto, vejo que tenho muito que ler ainda, e aprender aos poucos.

Abraços.

Gabriel
10/12/2008 8:16am (~15 anos atrás)

John. Muito boa sua didática para explicação. Pra mim nunca fica muito claro, porque sou iniciante em PHP, estou começando a ler algumas coisas, mais estruturado do que orientado a objetos, porém preciso aprender esse método de programar, POO, pois meu projeto final está nas portas e ele, obrigatoriamente, deve ser orientado a objeto. Mas a forma como explica muito me agrada. E digo mais, se dominaste bem a POO, ou PHP em geral, por favor publique uma apostila, eu inicie o processo de construção de livros explorando a linguagem, sério mesmo. Pois pelo que venho lendo, o Brasil ainda é muito carente nesse ponto. São raros os livros em português que tenha uma credibilidade grande como os livros da própria lingua inglesa.

POw, ta de parabéns!!! quando escrever mais artigos, por favor me comunique: gabrielantunes.cruz@gmail.com

Abraços.

Gantuz
10/12/2008 8:13am (~15 anos atrás)

Dam disse:
Bom artigo.
20/11/2008 4:25am (~15 anos atrás)

Dam disse:
Bom artigo.
20/11/2008 4:25am (~15 anos atrás)

Iuri Neumann disse:
Legal seu artigo... to esperando continuaçoes... :)
to me adaptando para trabalhar com classes agora, e to aprendendo ainda, quanto a manipulaçoes e tal... muito bons esses artigos exemplificando... vlw
20/09/2007 7:14pm (~16 anos atrás)

Rapaiz, como eu gosto de OO devo te dar os parabéns pelo artigo, didático e bom.
04/09/2007 9:38am (~16 anos atrás)

John Marques disse:
Q bom q gostou Hunter..
estou preparando o próximo artigo.. para dar continuidade.. nas Classes e Objetos..

valeu
23/08/2007 6:47am (~16 anos atrás)

Felipe Sander disse:
Método de explicar bem simples e fácil de aprender. Valeu.
19/08/2007 7:29pm (~16 anos atrás)

Novo Comentário:

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