0

Ajax を使用して、Javascript を使用して php クラスからメソッドを呼び出す良い方法があるかどうか疑問に思っていました。

これが私の現在の実行スタイルです。

(例としてクラス内のメソッドはここだけです)

PHP側:

<?php

if(isset($_POST['action']) && $_POST['action'] != null)
{
    extract($_POST);

    if($action)
    {
        $ajaxCommand = new EleveUpdate();

        if(method_exists($ajaxCommand, $action))
        {
            $reponse = call_user_func(array($ajaxCommand, $action),$_POST);
            echo $reponse;
            exit(0);
        }
        else 
        {
            throw new Exception("Cette méthode n'existe pas");
        }
    }
}
else
{
    echo 'Cette action n\'est pas autorisée';
    return false;
}

class EleveUpdate
{

    public function __construct()
    {

    }

    public function testfunct($data)
    {
        echo $data['eleve'];
    }
}

Javascript 側:

$(document).ready(function() {
    $.ajax({
        url: 'eleveupdate.php',
        type: 'POST',
        data: {
          action: "testfunct",
          eleve: 1
        },
        beforeSend: function()
        {
            loading(true);
        },
        error: function()
        {
            console.log('error');
        },
        success: function(data) 
        {
            loading(false);
            console.log(data);
        }
    });
});

問題は、 isset $_POST が常に私のクラスにあることです。これは正しい方法ではないと確信しているため、ヘルプを見つけるためにここにいます。

よろしくお願いします

サイモン

4

1 に答える 1

0

問題は、文字列リクエストに基づいてスコープネーミングを呼び出すのは簡単ではないということです。LAMBDAまたは無名関数と呼ばれるものを使用できます。このようにして、LAMBDAが付加された文字列の配列を格納できます。このような:

<?php
class EleveUpdate {
    private $funcs = array();

    function __construct($which_function) {
        $funcs['testfunct'] = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');

        $funcs[$which_function];
    }
}
?>

詳細については、こちらをご覧ください:http ://www.php.net/manual/en/function.create-function.php

このメソッドでは、おそらくクラスはもう必要ありませんが、表示するだけです。

于 2013-02-17T23:10:23.590 に答える