domingo, 5 de janeiro de 2014

PHP - Iniciando com Orientação a Objetos

Classe

Toda definição de classe começa com a palavra-chave class, seguido por um nome da classe, que pode ser qualquer nome que não seja uma palavra reservada no PHP, seguido por um par de chaves, que contém a definição dos membros e métodos da classe. Uma pseudo variável, $this, está disponível quando um método é chamado dentro de um contexto de objeto. $this é uma referência para o objeto chamador do método (normalmente o objeto ao qual o método pertence, mas pode ser outro objeto, se o método é chamado estaticamente no contexto de um objeto secundário). Isso é ilustrado no exemplo a seguir: 

Exemplo #1 Variável $this em linguagens com orientação a objetos
<?phpclass A{
    function 
foo()
    {
        if (isset(
$this)) {
            echo 
'$this está definida (';
            echo 
get_class($this);
            echo 
")\n";
        } else {
            echo 
"\$this não está definida.\n";
        }
    }
}

class 
B{
    function 
bar()
    {
        
A::foo();
    }
}
$a = new A();$a->foo();A::foo();$b = new B();$b->bar();B::bar();?>
 
O exemplo acima irá imprimir:
$this está definida (A)
$this não está definida.
$this está definida (B)
$this não está definida.
 
Exemplo #2 Definição de SimpleClass

<?phpclass SimpleClass{
    
// declaração de membro
    
public $var 'um valor padrão';

    
// declaração de método
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>
 
O valor padrão deve ser uma expressão constante, não (por exemplo) uma variável, um membro da classe ou uma chamada de função. 

Exemplo #3 Valor padrão de membros da classe

<?phpclass SimpleClass{
    
// declarações de membro inválidas
    
public $var1 'olá '.'mundo';
    public 
$var2 = <<<EODolá mundoEOD;
    public 
$var3 1+2;
    public 
$var4 self::myStaticMethod();
    public 
$var5 $myVar;

    
// declarações de membro válidas
    
public $var6 myConstant;
    public 
$var7 self::classConstant;
    public 
$var8 = array(truefalse);


}
?>
Nota:
Existem algumas funções legais para lidar com classes e objetos. É bom dar uma olhada nas funções de Classe/Objeto.
Diferente de heredocs, nowdocs pode ser usado no contexto de dado estático.

Exemplo #4 Exemplo com dado estático

<?phpclass foo {
    
// A partir do PHP 5.3.0
    
public $bar = <<<'EOT'barEOT;
}
?>
Nota:
Suporte a Nowdoc foi adicionado no PHP 5.3.0.

new

Para criar uma instância de uma classe, um novo objeto deve ser criado e atribuído a uma variável. Um objeto sempre será atribuído quando for criado um novo objeto, a não ser que o objeto tenha um construtor definido que dispare uma exceção por um erro. Classes devem ser definidas antes de serem instanciadas (e em alguns casos isso é um requerimento). 

Exemplo #5 Criando uma instância

<?php
$instance 
= new SimpleClass();?>
 
No contexto da classe, é possível criar um novo objeto por new self and new parent.
Quando atribuir uma instância já criada de um objeto a uma variável nova, a variável nova irá acessar a mesma instância do objeto que foi atribuído. Esse comportamento se mantém quando passando instâncias a uma função. Uma nova instância de um objeto já criado pode ser feita clonando o mesmo. 

Exemplo #6 Atribuição de Objetos

<?php
$assigned   
=  $instance;$reference  =& $instance;
$instance->var '$assigned terá esse valor';
$instance null// $instance e $reference tornam-se nulos
var_dump($instance);var_dump($reference);var_dump($assigned);?>
O exemplo acima irá imprimir:
NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned terá esse valor"
}

extends

Uma classe pode herdar métodos e membros de outra classe usando a palavra-chave extends na sua declaração. Não é possível herdar classes múltiplas, uma classe só pode herdar uma classe base.
Os métodos e membros herdados podem ser sobrescritos, a não ser que a classe pai definiu um método como final, redeclarando eles com o mesmo nome definido na classe pai. É possível acessar os métodos sobrescritos ou membros estáticos referenciado-os com parent::
 
Exemplo #7 Herança da Classe Simples

<?phpclass ExtendClass extends SimpleClass{
    
// Redefine o método pai
    
function displayVar()
    {
        echo 
"Classe Herdeira\n";
        
parent::displayVar();
    }
}
$extended = new ExtendClass();$extended->displayVar();?>

O exemplo acima irá imprimir:
Classe Herdeira
um valor padrão

::class

Since PHP 5.5, the class keyword is also used for class name resolution. You can get a string containing the fully qualified name of the ClassName class by using ClassName::class. This is particularly useful with namespaced classes. 

Exemplo #8 Class name resolution

<?phpnamespace NS {
    class 
ClassName {
    }
   
    echo 
ClassName::class;
}
?>

Nenhum comentário:

Postar um comentário