PHP Conference Nagoya 2025

ReflectionClass::newLazyProxy

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyProxyCria uma nova instância de proxy lento

Descrição

public ReflectionClass::newLazyProxy(callable $factory, int $options = 0): object

Cria uma nova instância de proxy lento da classe, anexando a função factory a ela. O construtor não é chamado e as propriedades não são definidas com seus valores padrão. Quando é feita uma tentativa de observar ou modificar o estado do proxy pela primeira vez, a função de fábrica é chamada para fornecer uma instância real, que é então anexada ao proxy. Depois disso, todas as interações subsequentes com o proxy são encaminhadas para a instância real. Consulte Gatilhos de Inicialização e Sequência de Inicialização .

Parâmetros

factory
A fábrica é uma função de retorno com a seguinte assinatura:

factory(object $object): object
object
O parâmetro object informa o objeto que está sendo inicializado. Neste ponto, o objeto não está mais marcado como lento e acessá-lo não aciona a inicialização novamente.

A função de fábrica deve retornar um objeto, chamado de instância real, que é então anexado ao proxy. Esta instância real não deve ser lenta e não deve ser o próprio proxy. Se a instância real não tiver a mesma classe do proxy, a classe do proxy deverá ser uma subclasse da classe da instância real, sem propriedades adicionais, e não deverá substituir os métodos __destruct() ou __clone().
options

options pode ser uma combinação das seguintes opções:

ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
Por padrão, a serialização de um objeto lento aciona sua inicialização. Definir essa opção impede a inicialização, permitindo que objetos lentos sejam serializados sem serem inicializados.

Valor Retornado

Retorna uma instância de proxy lento. Se o objeto não tiver propriedades, ou se todas as suas propriedades forem estáticas ou virtuais, uma instância normal (não-lenta) será retornada. Veja também Ciclo de Vida de Objetos Lentos.

Erros/Exceções

Um Error se a classe for interna ou estender uma classe interna exceto stdClass.

Exemplos

Exemplo #1 Uso básico

<?php
class Example {
public function
__construct(public int $prop) {
echo
__METHOD__, "\n";
}
}

$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyProxy(function (Example $object) {
$realInstance = new Example(1);
return
$realInstance;
});

var_dump($object);
var_dump($object instanceof Example);

// Aciona a inicialização e encaminha a busca de propriedade para a instância real
var_dump($object->prop);

var_dump($object);
?>

O exemplo acima produzirá:

lazy proxy object(Example)#3 (0) {
  ["prop"]=>
  uninitialized(int)
}
bool(true)
Example::__construct
int(1)
lazy proxy object(Example)#3 (1) {
  ["instance"]=>
  object(Example)#4 (1) {
    ["prop"]=>
    int(1)
  }
}

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top