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(true, false);
}?>
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
O exemplo acima irá imprimir:
<?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.
<?phpnamespace NS {
class ClassName {
}
echo ClassName::class;
}?>
Nenhum comentário:
Postar um comentário