Вы находитесь на странице: 1из 29

OOP com PHP

20 OOP com PHP OOP com PHP Neste exemplo vamos criar dois scripts php, um chamado index.php e outro chamado classes.php. O script classes.php vai conter todas o nosso cdigo OOP e ser includo onde desejarmos utilizando includes. A base para a programao OOP so as classes, que representam os objectos. Em vez de criarmos procedimentos e/ou funes, podemos criar classes que incorporem as funcionalidades que desejamos.

OOP com PHP


20.1 OOP com PHP Vejamos o exemplo abaixo: <?php class automovel { } ?> Dentro da classe, podemos adicionar variveis, as propriedades, e funes, os mtodos.

OOP com PHP


20.2 OOP com PHP <?php class automovel { public $marca; function set_marca($nova_marca) { $this->marca = $nova_marca; } function get_marca() { return $this->marca; } } ?>

OOP com PHP


20.3 OOP com PHP Os Getters e os setters Como pode ser observado no exemplo anterior, criamos duas funes com o nome set_marca() e get_marca(). Estas funes serviro para atribuir valores s propriedades (set) e retornar os valores das propriedades (get). Esta forma de atribuir e retornar propriedades segue o mesmo formato e outras linguagens como por exemplo o java. Est convencionado que os nomes dos getters e dos setters devem ser iguais aos nomes das propriedades. Desta forma os programadores que usarem esta classe, atravs do nome destas funes, sabem que existe uma propriedade com o mesmo nome. A varivel $this No exemplo acima, usamos uma varivel especial que nos permite criar um apontador para o objecto corrente. Usamos o $this para aceder s propriedades da classe e para chamar os seus mtodos.

OOP com PHP


20.4 OOP com PHP Criar o ficheiro index.php Vamos criar um ficheiro index.php, que usaremos para instanciar a nossa classe. Devem copiar o seguinte cdigo para o ficheiro index.php: <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php include("classes.php"); ?> </body> </html>

OOP com PHP


20.5 OOP com PHP Instnciar/criar um objecto As classes so os modelo para os objectos. As classes s se tornam objectos quando as instnciamos. Quando instnciamos uma classe, criamos uma instncia dessa mesma classe, logo um objecto representado por essa classe. O acto de criar uma instncia o processo de criar um objecto em memria. Para criarmos um objecto no nosso exemplo, a seguir ao include introduzimos a instruo: $automovel = new automovel();

OOP com PHP


20.6 OOP com PHP A variavel $automovel vai ser a ligao com o nosso novo objecto automovel. Podemos usar agora a varivel $automvel para controlar e usar o nosso objecto. Para criar um novo objecto, devemos instanci-lo com o termo new, que significa na prtica que estamos a criar um novo objecto da classe automvel. Se executarmos algo como o exposto abaixo: $automovel1 = new automovel(); $automovel2 = new automovel();

OOP com PHP


20.7 OOP com PHP A variavel $automvel vai ser a ligao com o nosso novo objecto automvel. Podemos usar agora a varivel $automvel para controla e usar o nosso objecto. Para criar um novo objecto, devemos instanci-lo com o termo new, que significa na prtica que estamos a criar um novo objecto da classe automvel. Se executarmos algo como o exposto abaixo: $automovel1 = new automovel(); $automovel2 = new automovel(); Do ponto de vista do PHP, estamos a criar dois objectos diferentes. Por conveno, sempre que criamos um novo objecto, devemos colocar parntesis () no fim do seu nome.

OOP com PHP


20.8 OOP com PHP Assumindo que j instanciamos o nosso objecto, podemos atribuir valores aos atributos. Essa atribuio pode ser efectuada da seguinte forma: $automovel = new automovel(); $automovel->set_marca(Renault); Para acedermos aos valores atribudos s propriedades dos objectos, usamos o setter que definimos anteriormente. Se quisermos, por exemplo, escrever a marca do automvel, necessitamos do cdigo abaixo: echo $automovel -> get_marca(); Nota: para aceder aos mtodos e propriedades, devemos usar o operador -> (flecha).

OOP com PHP


20.9 OOP com PHP Podemos aceder aos atributos directamente sem usar o mtodo getter, mas tal facto no recomendado, isto , devemos sempre usar:

echo $automovel -> get_marca(); em vez de: echo $automovel -> marca;

OOP com PHP


20.10 OOP com PHP Exerccio: Implementar uma propriedade para a matrcula do automvel, associar uma matricula propriedade e imprimir a matrcula.

OOP com PHP


20.11 OOP com PHP Constructor Os objectos no PHP podem ter um mtodo especial chamado constructor. Os constructores permitem que seja possvel inicializar, por exemplo propriedades, quando instanciamos um objecto. No obrigatrio a criao de um mtodo deste tipo, mas se ele existir o PHP o executar automaticamente. Foi convencionado que este mtodo especial iniciado sempre por duplo underscore, seguido do termo construct(). Exemplo: __construct()

OOP com PHP


20.12 OOP com PHP A nossa classe actualizada e contendo o mtodo __contruct() ficar assim: <?php class automovel { public $marca; public $matricula; function __construct($marca_automovel) { $this->marca = $marca_automovel; } function set_marca($nova_marca) { $this->marca = $nova_marca; }

OOP com PHP


20.13 OOP com PHP function get_marca() { return $this->marca; } function set_matricula($nova_matricula) { $this->matricula = $nova_matricula; } function get_matricula() { return $this->matricula; } } ?>

OOP com PHP


20.14 OOP com PHP Para instanciarmos a classe com o _construct podemos executar o seguinte: <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php include("classes.php"); $automovel = new automovel('Opel'); echo $automovel->get_marca() . '<br />'; $automovel->set_marca('Renault'); $automovel->set_matricula('TN-36-32'); echo $automovel->get_marca() . '<br />'; echo $automovel->get_matricula(); ?> </body> </html>

OOP com PHP


20.15 OOP com PHP Para instanciarmos a classe com o _construct podemos executar o seguinte: <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php include("classes.php"); $automovel = new automovel('Opel'); echo $automovel->get_marca() . '<br />'; $automovel->set_marca('Renault'); $automovel->set_matricula('TN-36-32'); echo $automovel->get_marca() . '<br />'; echo $automovel->get_matricula(); ?> </body> </html>

OOP com PHP


20.16 OOP com PHP Usando access modifiers possvel modificar o comportamento das propriedades usando access modifiers. Os 3 access modifiers existentes so: Public Private Protected Por defeito, se no for especificado, as propriedades so pblicas, logo quando especificamos no nosso exemplo o cdigo var $marca, esta propriedade pblica.

OOP com PHP


20.17 OOP com PHP Quando definimos uma propriedade como private, a mesma s pode ser acedida dentro da mesma classe. Quando definimos como protected, s a mesma classe ou classes derivadas desta podem aceder propriedade. Propriedades public podem ser acedidas sem restries. Vejamos um exemplo do uso do termo private: classes.php: <?php class automovel { private $matricula; function __construct($matricula) { $this->matricula = $matricula; } } ?>

OOP com PHP


20.18 OOP com PHP index.php <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF8"> </head> <body> <?php include("classes.php"); $automovel = new automovel(XZ-12-14'); echo $automovel->matricula; ?> </body> </html>

OOP com PHP


20.19 OOP com PHP Como observamos, o script d erro de execuo. Como a propriedade privada, s conseguimos ter acesso mesma dentro da classe, tipicamente dentro de outro mtodo. O mesmo se aplica aos mtodos, que partilham dos mesmos access modifiers.

OOP com PHP


20.20 OOP com PHP Inheritance A inheritance permite criar novas classes com base em outras j existentes. Se j existir uma classe que contenha parte da funcionalidade existente, podemos criar uma nova que herde da j existente e s implementar as funcionalidades que novas que desejamos. Uma das grandes vantagens da programao por objectos permitir a reutilizao de cdigo, tonando assim o nosso cdigo mais leve, porque estamos a reutiliz-lo. Imaginemos que alteramos a nossa classe inicial e em vez de termos uma classe automvel, criamos uma classe veculo.

OOP com PHP


20.21 OOP com PHP <?php class veiculo { public $tipoveiculo; public $matricula; function __construct($tipoveiculo) { $this->set_tipoveiculo($tipoveiculo); } function set_tipoveiculo($nova_matricula) { $this->matricula = $nova_matricula; } function get_tipoveiculo() { return $this->matricula; }

OOP com PHP


20.22 OOP com PHP
function set_matricula($nova_matricula) { $this->matricula = $nova_matricula; } function get_matricula() { return $this->matricula; }

OOP com PHP


20.23 OOP com PHP Agora vamos criar uma classe que vai herdar da classe veculo e manter as suas funcionalidades. Vejamos o exemplo abaixo: class motociclo extends veiculo { public $tipoveiculo; public $matricula; function __construct() { $this->set_tipoveiculo('Motociclo'); } } ?>

OOP com PHP


20.24 OOP com PHP Vejamos agora um exemplo de uso desta classe: <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php include("classes.php"); $veiculo = new veiculo('Automvel'); echo $veiculo->get_tipoveiculo(); echo '<br />'; $motociclo = new motociclo(); echo $motociclo->get_tipoveiculo(); ?> </body> </html>

OOP com PHP


20.25 OOP com PHP A classe motociclo herdou as suas funcionalidades e caractersticas da classe base veculos, criando assim uma hierarquia de classes. Ao extendermos base classes, podemos tambm criar novos mtodos ou fazer overriding de metodos existentes.

OOP com PHP


20.26 OOP com PHP class motociclo extends veiculo { public $tipoveiculo; public $fabricante = array( 'yamaha'=> 'japo', 'suzuki'=> 'japo', 'harley davidson'=> 'america' ); public $paisfabrico; function __construct($marca) { $this->set_marca($marca); }

OOP com PHP


20.27 OOP com PHP function get_paisfabrico() { if (array_key_exists($this->marca, $this->fabricante)) { $this->paisfabrico = $this->fabricante[$this->get_marca()]; } else { $this->paisfabrico = 'Fabricante no existe'; } return $this->paisfabrico; } } ?>

OOP com PHP


20.28 OOP com PHP Ficheiro index.php <html> <head> <title>OOP no PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF8"> </head> <body> <?php include("classes.php"); $motociclo = new motociclo('suzuki'); echo $motociclo->get_paisfabrico(); ?> </body> </html>

Вам также может понравиться