Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tem como acessar um metodo estatico de uma classe em php usando jQuery?
Exemplo: Eu mandaria para o arquivo geral.class.php um post com os valores e especialmente um com o nome acao. Ai quando eu chegar lá neste arquivo, eu terei algo que executaria tal metodo? O que foi passado em ação no caso. É isso?
Tem algo no php chamado call_user_func. Esta função serve para classes?
Sim, mais ou menos o que se segue abaixo.
Manteria a minha classe, e somente ela em um arquivo.
MinhaClasse.php
<?php
class MinhaClasse {
public static function executarMinhaFuncao() {
echo 'executando minha função';
}
}
E utilizaria um arquivo para "manusear" a classe.
handlerMinhaClasse.php
<?php
include('MinhaClasse.php');
MinhaClasse::executarMinhaFuncao();
Saída:
executando minha função
Assim, você evita que, sempre quando chamar a Classe, ela execute a função que está no arquivo handlerMinhaClasse.php.
No seu caso, você vai ter um 'switch' para verificar qual método deve ser chamado e de qual classe.
Num sistema de quase 60 entidades como vai ficar isso?
Terei que ter um arquivo pra cada necessidade?
Depende do que você quer fazer, da sua real necessidade. Explique seu problema.
Estou dando manutenção em um sistema que tem quase 70 entidades.
O que preciso é consolidar todas as funções basicas deste sistema em metodos estaticos numa classe em php.
Muitas desses metodos precisarei acessar atraves de jquery. Enviar valores e receber resposta.
Por isso que queria uma jeito de entrar no arquivo classe.php e lá escolher qual o metodo quero acessar.
Um arquivo com varias funcoes é facil, é só usar call_user_func. Agora em uma classe não sei como.
Você pode utilizar ReflectionMethod. Mas vou começar do básico para o avançado, ok?
Digamos que você esteja consultando através de query string, get nesse caso.
Vou definir um arquivo handler.php. Você o chama da seguinte forma:
<a href="handler.php?class=MinhaClasse&method=executarMinhaFuncao" >Link 1</a>
No seu código PHP, poderia fazer da seguinte forma.
$class = $_POST['MinhaClasse'];
$method = $_POST['method'];
{$class}::{$method}();//O php reconhecerá como MinhaClass::executarMinhaFuncao();
O PHP é capaz de reconhecer a chamada da classe através das strings que você estiver utilizando. Entretanto, se algum "malaco" alterar sua query string, você pode ter alguns problemas.
Por outro lado, existe a biblioteca Reflection, que nada mais é que um conjunto de classes que "refletem" classes, interfaces, funções, métodos e extensões.
No nosso caso, a classe utilizada seria ReflectionMethod, pois você necessita o uso de um método.
Vamos ao exemplo prático à partir da query string acima mencionada:
$class = $_POST['MinhaClasse'];
$method = $_POST['method'];
try {
$reflectionMethod = new ReflectionMethod($class , $method);
$reflectionMethod->invoke( new $class() );
} catch ( ReflectionException $e ) {
throw new RuntimeException('Não foi possível executar o método.' , $e->getCode() , $e);
}
Assim, caso a classe/método não existir, será lançada uma exceção. Aqui, no catch, você pode alterar para uma página padrão de "página não encontrada".
A não ser que o usuário consiga incluir uma nova classe no seu sistema, não prevejo problemas de segurança.
Sim e não. Você não pode acessar diretamente um método PHP. Mas você pode acessar um arquivo, e esse arquivo acessar o método.
A função($.post) é bem simples, diga-se de passagem. Basta definir o método(PHP) no arquivo que for chamado pelo post. Não entrarei em detalhes sobre a função javascript, mas no arquivo em PHP seria algo como isso: