Pergunta

Estou usando um ge_called_class hackear para permitir a ligação estática tardia no PHP versão 5.2 (encontrado aqui).

Eu tenho o seguinte no meu código:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

Isso não funcionará no Php 5.2 por algum motivo, então eu fiz isso:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

Por outro lado, não funcionará com o get_called_class função. Eu recebo um erro que o file A função não consegue ler a seção avaliada do código.

Foi útil?

Solução

Se você está usando avaliação, sua solução está errada.

Por que sua versão não eval não funciona? O que está dando errado? Qual é a mensagem de erro completa e completa?

A versão suprida pelo usuário de get_called_class Executa um backtrace e tenta abrir o arquivo do chamador para determinar o nome da classe. O motivo pelo qual a avaliação falha é porque o backtrace de avaliação não fornece um nome de arquivo.

(Editar: Além disso, que get_called_class Hack é muito um hack. Existe uma razão pela qual você não pode usar 5.3?)

Você já tentou usar call_user_func? call_user_func(array($ac, 'find'), 'all') deve Chame o método estático find para o nome da classe contido em $ac com o paramater 'all'. Veja também o pseudo-tipo de retorno de chamada e o exemplo "tipo 2" em específico

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top