PHP、jQuery和Ajax面向对象

PHP、jQuery和Ajax面向对象,php,jquery,ajax,oop,Php,Jquery,Ajax,Oop,我是一个经验丰富的程序员,第一次熟悉PHP和Ajax,我在想如何将面向对象的PHP整合到我的Ajax webapp中时遇到了一些困难 我有一个管理页面(admin.php),它将根据用户在管理页面上选择的表单从xml文件加载和写入信息(info.xml)。我决定使用一个对象(ContentManager.php)来管理XML文件到磁盘的加载和写入,即: class ContentManager{ var $xml_attribute_1 ... function __construct

我是一个经验丰富的程序员,第一次熟悉PHP和Ajax,我在想如何将面向对象的PHP整合到我的Ajax webapp中时遇到了一些困难

我有一个管理页面(admin.php),它将根据用户在管理页面上选择的表单从xml文件加载和写入信息(info.xml)。我决定使用一个对象(ContentManager.php)来管理XML文件到磁盘的加载和写入,即:

class ContentManager{

 var $xml_attribute_1
 ...

 function __construct(){
    //load the xml file from disk and save its contents into variables
    $xml_attribute = simplexml_load_file(/path/to/xml)
 }
 function get_xml_contents(){
    return xml_attribute;
 }
 function write_xml($contents_{
 }
 function print_xml(){
 }    
}
我在admin.php中创建ContentManager对象,如下所示

<?php
include '../includes/CompetitionManager.php';
$cm = new CompetitionManager()
?>
<script>
  ...all my jquery
</script>
<html>
  ... all my form elements
</html>

…我所有的jquery
... 我所有的表单元素
因此,现在我想使用AJAX,允许用户通过ContentManger应用程序使用类似这样的接口(AJAX_handler.php)从XML文件检索信息


我知道如果我不使用对象,这将如何工作,即hander php文件将根据.post请求中的变量执行特定操作,但在我的设置中,我看不到如何在ajax_handler.php文件中获取对我在admin.php中创建的ContentManager对象的引用?也许我对php对象范围的理解有缺陷


不管怎样,如果有人能理解我在做什么,我将非常感谢你的帮助

将每个ajax调用视为一个单独的请求。如果在特定请求的生命周期中,您没有实例化ContentManager,则该对象不存在。如果您想在多个请求之间使用单个对象,请在请求生命周期的早期将其序列化到会话并反序列化。

我不知道这是否是您需要的,好了,开始吧。有一个PHP文件来处理所有表单提交。例如:proc.php或ACTION=“proc.php”中的类似内容。在proc.php内部,根据提交的参数进行函数调用。您应该做的另一件事是在类文件本身的末尾创建类(对象)的实例,避免每次都需要检查对象是否实例化。
如果需要,在调用对象函数之前使用
global$objectname

我已经在admin.php文件的开头实例化了ContentManager对象,因此它应该在用户与表单的整个交互过程中都存在?不……如果是ajax调用,它是一个完全独立的http请求。浏览器没有“回发”这一事实可能会引起一些混乱,但ajax请求遵循与页面请求或表单回发相同的生命周期。如果这有点难以想象,请下载Firefox的实时HttpHeaders插件,并在您的页面上观看ajax请求从客户端到服务器的过程。hmmm,也许我对这一点的理解有点偏差。我知道当你做一个Ajax请求时,它是一个全新的http调用,因此它的生命周期很短,但是如果admin.php加载了,我创建了php对象,那么在引用丢失之前,也就是在用户离开页面之前,php对象是否不会无限期地驻留在服务器上?这意味着在此期间,任何Ajax请求都可以访问该objectno。将服务器和客户端视为完全断开连接。当页面在服务器上完成渲染后,它将被发送到客户端,所有内容都将被销毁。为了让任何东西在请求之间生存,您必须使用某种内存或文件存储,并在后续请求中从中取出对象。由于您使用的是php,这将是我为您提供的$_SESSIONah,我认为对象在服务器上保持活动状态。PHP中的对象似乎有点麻烦,只需按程序执行就更容易了?在会话变量中对对象进行编码是否正常且安全?我实际上已经在ajax_handler.php中这样做了。问题是ContentManager php类是一个单独的文件,单独实例化为ajax_handler.php。只需将ContentManager文件包含在ajax_handler.php中,而不是admin.php中,并使用该对象即可。是这样还是我在这里误解了什么?
<?php
  if(_POST[]=="get_a"){

  }else if()
  }
  ...
 ?>