PHP e
MySQL
WEB DEVELOPMENT
Maria Soromenho / maria_soromenho@professores.etic.pt
OOP - Programação Orientada a Objectos
No mundo real, os objectos (físicos ou conceptuais) têm, regra geral, propriedades e funções associadas.
Por exemplo, um carro tem propriedades como cor ou número de portas e funções como andar, transportar pessoas, trocar um pneu. Um objecto conceptual é, por exemplo, uma encomenda que fazemos numa loja - uma encomenda tem como propriedade o valor total, ou o desconto e tem como funções associadas um pagamento, uma devolução ou a emissão de uma factura.
A programação orientada a objectos é uma forma de programar que permite organizar o código por objectos.
Em vez de termos uma série de funções soltas que executam uma determinada tarefa, temos as funções agrupadas de forma lógica num ficheiro ao qual chamamos uma classe.
Os objectos são instâncias da classe, o que quer dizer que são criados a partir dela e herdam todas as propriedades e funções associadas.
Um atributo é uma propriedade ou característica de um objecto. Por exemplo, quando dizemos que um carro é vermelho, vermelho é uma propriedade do carro e o carro é o objecto em si.
Um método é uma função ou comportamento que o objecto pode ter. Por exemplo, se
dissermos "o pássaro pode voar", "voar" é um comportamento do pássaro e o pássaro é o objecto.
Classes e Instâncias
class Student {
var $first_name;
var $last_name;
var $country = 'Portugal';
function say_hello(){
return 'Hello!';
} }
$student1 = new Student; // instância da classe Student
$student1->first_name = 'Ana';
echo $student1->say_hello();
$student2 = new Student; // instância da classe Student
$student2->first_name = 'Benjamin';
Uma classe é composta por atributos (variáveis) e métodos (funções).
Uma instância é um objecto criado a partir de uma classe. Podemos ter quantas instâncias quisermos.
Todas têm a mesma estrutura, definida na classe, mas são objectos independentes.
Inheritance / Classes herdeiras
class Vehicle { var $color;
var $weels;
var $doors';
function is_good_for_rain(){
return true;
} }
Uma classe herdeira herda todos os atributos e métodos da classe mãe.
Pode ainda ter atributos e métodos próprios e fazer override a métodos existentes.
class Car extends Vehicle { var $weels = 4;
var $is_convertible = false;
function is_good_for_rain(){
return !$is_convertible;
} }
class Bike extends Vehicle { var $weels = 2;
var $doors = 0;
function is_good_for_rain(){
return false;
} }
Inheritance / Classes herdeiras
class User {
var $first_name;
var $last_name;
var $is_adult = FALSE;
function say_hello($name){
return 'Hello ' . $name . '!';
}
function login(){
} }
Uma classe herdeira herda todos os atributos e métodos da classe mãe.
Pode ainda ter atributos e métodos próprios e fazer override a atributos ou métodos existentes.
class Student extends User { var $email;
function check_grades(){
return $grades;
} }
class Teacher extends User { var $is_adult = TRUE;
function say_hello($name){
return 'Hello teacher ' . $name;
}
function view_students(){
return $students_list;
} }
Modifiers
Todas os métodos e atributos de um objecto têm uma determinada visibilidade que define o contexto em que podem ser acedidos.
class Vehicle {
public $color; // o mesmo que var $color protected $weels;
private $doors';
public function is_good_for_rain(){
return true;
} }
public pode ser acedido de qualquer contexto
protected pode ser acedido pela própria classe e por classes herdeiras private pode ser acedido apenas pela própria classe
static pode ser acedido fora da classe
Static modifier
Por vezes pode ser necessário aceder a um atributo ou método de uma classe sem ter de criar um objecto.
class Vehicle {
public static $weels = '4';
public static $doors = '2';
public static function get_weels(){
//usamos ::self para chamar uma propriedade static dentro da mesma classe return self::$weels;
} }
class Car extends Vehicle {
public function get_doors(){
//usamos ::parent para chamar uma propriedade static dentro da mesma classe return parent::$weels;
} }
//usamos nome_da_função::parent para chamar uma propriedade static fora da classe echo Vehicle::$weels;
echo Vehicle::$get_weels();
Magic Methods
São funções que correm automaticamente e podem ser declarados de forma a definir o seu comportamento.
class Student {
public $first_name;
public function __construct($name){
echo 'Foi criado um novo objecto!';
$this->name = $name;
} }
$student1 = new Student('David');
echo $student1->first_name;
__construct(parâmetros){
//É executado automaticamente quando uma classe é instanciada, ou seja, quando é criado um objecto.
}