0

这是我要问的一个非常简单而愚蠢的问题:

我对 PHP 很陌生,我想知道是否有一种方法可以通过 AJAX 调用 PHP 类中的一个函数。

例如这样的:

$.ajax({
        url:'newPHPClass.php/My_Function_Name'
        ...
});

所以在php中,它会像:

<?php
class newPHPClass {
    function My_Function_Name(){

    }
}
?>

为什么我需要这个?所以我不会有这么多的 php 文件。相反,我将有一个内部具有不同功能的单个 php 类。它看起来更干净,额外的文件更少。

我以前使用过 ASP.NET MVC C#。在 ASP.NET 中,我可以简单地将控制器的名称放在 AJAX 的 URL 部分,/然后是我的函数名称(可以在我的 Global.asax.cs 文件中修改)。

谢谢。

4

2 回答 2

1
<?php

$action = $_POST['action'];

class Foo {

    function execute($action) {
        switch($action) {
            case "method1":
                $this->doMethod1();
                break;
            case "method2":
                $this->doMethod2();
                break;
        }
    }

    function doMethod1() {
        echo "Foo::doMethod1";
    }

    function doMethod2() {
        echo "Foo::doMethod2";
    }
}

$foo = new Foo();
$foo->execute($action);

?>

foo.php?action=method1用作 URL。

于 2013-02-18T01:33:12.140 回答
1

首先,您不通过 AJAX调用函数或方法,而是向页面发出请求。如果您对 PHP 文件进行 AJAX 调用,例如:

<?php
class newPHPClass {
    function My_Function_Name(){

    }
}
?>

除了为该类分配空间然后在请求结束时立即销毁它之外,什么都不会返回,服务器端也不会发生任何事情。

对于您的问题:在客户端(Javascript)上,您将如何管理类和文件组织并不重要:AJAX 调用只会请求一个文件。

我建议你至少有两个不同的文件:函数或类的声明和管理响应的文件。你需要与执行和声明分开一点,因此我会避免这样的事情:

class A { ... }
$a = new A;
$a->myMethod();

根据 AJAX 输出,我会选择这样的东西:

# class.php
class A {...}

# ajax.php
$a = new A;
$a->myMethod();

最后一个建议:当它们没有意义时不要使用类。将一堆函数分组在一个类中对我来说并没有真正的 OOP 感觉。我认为您正在使用带有过程代码的类。因此,我会使用一个声明一堆函数的文件。

于 2013-02-18T01:42:25.463 回答