Conceitos de OO AUTOLOAD function autoload($class_name) require_once $class_name. '.php'; $obj = new MyClass1(); $obj2 = new MyClass2(); HERANÇA SIMPLES class SimpleClass // declaração de atributo public $var = 'um valor padrão'; // declaração de método public function displayvar() echo $this->var; class ExtendClass extends SimpleClass // Redefine o método pai (SOBRECARGA) function displayvar() echo "Classe Herdeira\n"; parent::displayvar(); $extended = new ExtendClass(); $extended->displayvar(); OPERADOR DE RESOLUÇÃO DE ESCOPO class MinhaClasse protected function minhafuncao() echo "MinhaClasse::minhaFuncao()\n";
class OutraClasse extends MinhaClasse /* Sobrecarrega a definição do pai */ public function minhafuncao() /* Mas ainda chama a função pai */ parent::minhafuncao(); echo "OutraClasse::minhaFuncao()\n"; $classe = new OutraClasse(); $classe->minhafuncao(); INTERFACE // Declara a interface 'itemplate' interface itemplate public function setvariable($name, $var); public function gethtml($template); // Implementa a interface // Isso funcionará class Template implements itemplate private $vars = array(); public function setvariable($name, $var) $this->vars[$name] = $var; public function gethtml($template) foreach($this->vars as $name => $value) $template = str_replace(''. $name. '', $value, $template); return $template; FACTORY IBanco.php:
Interface IBanco ; BancoMysql.php: class BancoMysql() implements IBanco return new PDO('mysql:host=localhost;dbname=banco','root',''); BancoPostgres.php: class BancoPostgres() implements IBanco return new PDO('pgsql:host=localhost port=5432 dbname=banco user=username password=senha '); BancoOracle.php: class BancoOracle() implements IBanco return new PDO( OCI:dbname=accounts;charset=UTF-8, username, senha ); Vejamos então a implementação desta classe: include_once BancoMysql.php ; include_once BancoPostgres.php ; include_once BancoOracle.php ;
class BancoFactory public function factory($banco) switch ($banco) case mysql : case postgres : case oracle : Na classe acima, de acordo com o parâmetro passado, é retornada uma instância de sua classe respectiva e se um dia houver uma mudança qualquer, por exemplo no nome da classe, você só precisará mudar em um lugar, na classe Factory. Agora vamos executar esta classe: include_once BancoFactory.php ; $bancofactory = new BancoFactory(); // Criando instância da classe BancoMysql $connmysql = $bancofactory->factory( mysql ); print_r($connmysql->connect()); // Criando instância da classe BancoPostgres $connpostgres = $bancofactory->factory( postgres ); print_r($connpostgres->connect()); // Criando instância da classe BancoOracle $connoracle = $bancofactory->factory( oracle ); print_r($connoracle->connect()); SINGLETON class Exemplo // Guarda uma instância da classe static private $instance;
// Um construtor privado private function construct() $link = mysql_connect('localhost', 'root', ''); if (!$link) die('não foi possível conectar: '. mysql_error()."<br><br>"); echo '<br><br>conexão bem sucedida.<br><br>'; $db_selected = mysql_select_db('teste', $link); if (!$db_selected) die ('Não foi possível selecionar : '. mysql_error()); // O método singleton static public function singleton() if (!isset(self::$instance)) $c = CLASS ; // retorna o nome da classe self::$instance = new $c; return self::$instance; // Método exemplo public function consultar($sql) $result = mysql_query($sql); if (!$result) die('<br><br>consulta Inválida: '. mysql_error()); // Isso sempre vai recuperar uma instância da classe echo "objeto1: "; $test = Exemplo::singleton(); $test->consultar('select * from clientes'); echo "<br>objeto2: "; $test2 = Exemplo::singleton(); $test2->consultar('select * from pedidos'); echo $test." ".$test2;