PHP4 já possui sintaxe de sobrecarga para estabelecer mapeamentos para modelos de objetos externos, assim como Java e COM PHP5 traz sobrecarga poderosa orientada a objetos, permitindo aos programadores criar comportamentos personalizados para acessar propriedades e chamar métodos
. __set e __call. Quando o mecanismo Zend tenta acessar um membro e não consegue encontrá-lo, o PHP chamará esses métodos,
se necessário, __get e __set substituem todos
.implemente qualquer tipo de filtragem desejada. Por exemplo, o script pode desabilitar a configuração de valores de atributos, começar com um determinado prefixo ou incluir um determinado tipo de valor.
O método __call ilustra como você pode chamar um método indefinido. , o nome do método e os parâmetros recebidos pelo método serão passados para o método __call, e o PHP passa o valor de __call de volta para o método indefinido
Sobrecarga no nível do usuário
<?php
.
classe Sobrecarregador
{
private $propriedades = array()
função __get($nome_propriedade)
{
if(isset($this->propriedades[$nome_da_propriedade]))
{
return($this->propriedades[$nome_da_propriedade]);
}
outro
{
retornar(NULO);
}
}
função __set($nome_da_propriedade, $valor)
{
$this->propriedades[$nome_da_propriedade] = $valor;
}
função __call($nome_função, $args)
{
print("Invocando $function_name()n");
print("Argumentos: ");
print_r($args);
retorno(VERDADEIRO);
}
}
$o = new Overloader();
//invoca __set() atribui um valor a uma variável de atributo inexistente e ativa __set()
$o->dynaProp = "Conteúdo Dinâmico";
//invoca __get() ativa __get();
print($o->dynaProp . "n");
//invoca __call() ativa __call()
$o->dynaMethod("Leon", "Zeev");
?>
Carregamento automático de classes
Ao tentar usar uma classe indefinida, o PHP reportará um erro fatal. Porém, o PHP pode ser incluído. Fornece uma função de carregamento automático para classes, o que pode economizar tempo de programação. Quando você tenta usar uma classe que o PHP não organizou, ele irá procurar uma função global __autoload. Se esta função existir, o PHP irá chamá-la com um parâmetro, o. parâmetro é o nome da classe.
Exemplo A Figura 2 ilustra como __autoload é usado. Ela assume que cada arquivo no diretório atual corresponde a uma classe. Quando o script tenta gerar uma instância da classe User, o PHP executará __autoload. A classe User é definida em class_User.php Independentemente de a chamada estar em letras maiúsculas ou minúsculas, o PHP retornará o nome
de carregamento automático da classe
<?php
.
//define a função de carregamento automático
função __autoload($classe)
{
include("class_" .ucfirst($class) . ".php");
}
//usa uma classe que deve ser carregada automaticamente
$u = novo usuário;
$u->nome = "Leão";
$u->printNome();
?>