Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
围绕PHP中的基本OOP绞尽脑汁_Php_Oop - Fatal编程技术网

围绕PHP中的基本OOP绞尽脑汁

围绕PHP中的基本OOP绞尽脑汁,php,oop,Php,Oop,我是一名经验丰富的程序员,经常使用OOP,因此我非常熟悉这个概念。我在网络开发方面也很有经验。我不熟悉的是它们是如何结合在一起的。例如,假设我正在编写一些论坛软件。我创建了一个类,该类将处理并表示用户的“Post”。我将创建从数据库加载它的方法,在屏幕上显示它以供阅读的方法,以及允许用户编辑内容的方法 这就是我困惑的地方。我将指示Post对象从数据库加载内容,然后将其显示在表单中供用户编辑。表格将在哪里提交信息?如果服务器上不再存在Post对象,如何将信息发送回Post对象?我是否必须重新创建p

我是一名经验丰富的程序员,经常使用OOP,因此我非常熟悉这个概念。我在网络开发方面也很有经验。我不熟悉的是它们是如何结合在一起的。例如,假设我正在编写一些论坛软件。我创建了一个类,该类将处理并表示用户的“Post”。我将创建从数据库加载它的方法,在屏幕上显示它以供阅读的方法,以及允许用户编辑内容的方法

这就是我困惑的地方。我将指示Post对象从数据库加载内容,然后将其显示在表单中供用户编辑。表格将在哪里提交信息?如果服务器上不再存在Post对象,如何将信息发送回Post对象?我是否必须重新创建post对象,向其提供表单数据,然后执行update方法?有没有办法让对象在服务器上持久化,直到不再需要它们


如果我的问题没有什么意义,我道歉。如果我知道该问什么,谷歌可能已经回答了我的问题。

在PHP中,当页面加载结束时,一切都会消失。常规post(如HTTP post)以特定文件为目标,可以说是一个post处理程序。在这篇文章中,最好能得到已经编辑过的论坛帖子的id。根据id从数据库获取当前版本,使用编辑的数据更新对象,然后保存它

我认为问题的一部分在于你的思维方式好像一切都应该是一个对象。在PHP中,可以根据需要构造对象。我建议将
POST
数据视为对象在PHP中是不直观的;你可以这样做,但你会遇到你建议的问题,那就是必须定义一切。另一方面,我发现定义
用户
会话
对象可以简化代码并使使用更直观。

为了解决这个问题,有一种流行的称为MVC(Model View Controller)的方法。阅读一些理论知识,并阅读一些相关的实现


这就是我困惑的地方。我将指示Post对象从数据库加载内容,然后将其显示在表单中供用户编辑。表格将在哪里提交信息

通过HTTP连接到您的Web服务器

如果服务器上不再存在Post对象,如何将信息发送回Post对象

从持久存储中,这通常是一个数据库

我是否必须重新创建post对象,向其提供表单数据,然后执行update方法

是的,因为HTTP请求是无状态的,它以顶级请求的形式命令应用程序

有没有办法让对象在服务器上持久化,直到不再需要它们

当然。有一些对象“冷冻库”可以让你持久地存储对象,如果你不再需要它们,你可以把它们从冰箱里拿出来


提供MVC的PHP框架是symfony2。本文对MVC的工作原理做了一些解释:这很好地解释了MVC如何与任何基于HTTP的PHP脚本/应用程序一起工作


如果您更喜欢阅读代码,请选择此选项。

基本上是的,您将重新创建对象。在PHP中,对象被实例化和杀死的次数要比在其他语言中多得多。您可以将对象序列化到会话中,但是为了保持RESTful,您不应该让请求依赖于会话的状态。同时,帖子可能已经从数据库中更改或消失,因此您应该再次检查数据库。只需通过HTML表单/URL/request传递足够的信息,以重新创建更新数据库中帖子所需的状态(这通常意味着传递帖子id)。

该对象仅在单个页面加载时有效。在那之后,一切都被摧毁了。因此,重新组装该对象所需的任何信息(如主键)都需要通过下一个HTTP请求返回给您(通常以表单形式提交)。

为了解决这个问题,有一种流行的称为MVC(Model View Controller)的方法。阅读一些理论知识,并阅读一些相关的实现。我意识到我必须跟踪ID。我明白了,但是HTML表单的“action”属性是什么?为了将编辑内容存储回数据库,我是否必须编写一个与保存Post类的文件不同的文件?也许就是这样做的。。。这对我来说没什么意义。不仅Symphony是MVC,Zend Framework、CakePHP、Yii和几乎所有主要的PHP框架也是如此。当然,MVC实现的差异可能存在于这些方面。我没有说过symfony是唯一一个实现MVC模式的框架,一点也没有。这只是一个例子。事实上,每个PHP脚本都内置了MVC,而不是OOP。我不争辩,我只是为了完整起见在你的帖子中添加了这个注释:-)一个链接可能比我读过的任何其他链接更能促进我的理解。