get_called_class hack não funcionando com avaliação de avaliação
-
27-09-2019 - |
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.
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