Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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中的MVC框架不能在请求之间持久化?_Php_Model View Controller_Frameworks_Persistence - Fatal编程技术网

为什么PHP中的MVC框架不能在请求之间持久化?

为什么PHP中的MVC框架不能在请求之间持久化?,php,model-view-controller,frameworks,persistence,Php,Model View Controller,Frameworks,Persistence,通过阅读几个PHP框架的源代码和文档,我能够理解的是,它们通常不会持久化,除了您个人缓存或放入$\u会话变量的内容。这是为什么?从本质上为每个请求初始化框架似乎是一种浪费,至少序列化和存储一些核心对象和变量以节省处理和时间不是更好吗? 起初我认为这是相当主观的,避免问,但我读到的每一篇文章都没有真正提到这一点,所以我肯定遗漏了一些明显的东西。 我所发现的唯一一个真正的提及/讨论是,它没有直接回答我的问题,其中一些问题有点超出了我的理解 编辑澄清:我不是在问PHP的内部工作原理,我知道持久性是如何

通过阅读几个PHP框架的源代码和文档,我能够理解的是,它们通常不会持久化,除了您个人缓存或放入$\u会话变量的内容。这是为什么?从本质上为每个请求初始化框架似乎是一种浪费,至少序列化和存储一些核心对象和变量以节省处理和时间不是更好吗?

起初我认为这是相当主观的,避免问,但我读到的每一篇文章都没有真正提到这一点,所以我肯定遗漏了一些明显的东西。

我所发现的唯一一个真正的提及/讨论是,它没有直接回答我的问题,其中一些问题有点超出了我的理解


编辑澄清:我不是在问PHP的内部工作原理,我知道持久性是如何工作的(即除非通过缓存或会话变量实现持久性),我是在问为什么PHP框架不为其核心对象这样做。对我来说,这似乎是主观的,但我所读到的几乎没有提到这一点,而且这似乎是相当标准的做法,我想知道我遗漏了什么。

如果您希望数据在服务器请求之间保持不变,那么您需要使用cookie/会话或将数据存储在数据库中。这就是它的工作方式。PHP本身无法存储数据,以便在服务器请求之间使用


有些框架可能将核心对象存储在数据库或磁盘上的本地文件中,但这取决于框架。

内存:

由于内存问题,大多数框架不会将这些核心机制存储在$\u会话中。框架通常会生成包含数兆信息的变量/对象。这听起来可能不多,但如果将其扩展到几千个用户,你就会遇到问题

数据“新鲜度”

将框架组件推入内存的第二个问题是,它们很快就会过时。与其将对象从内存中拉出,不如检查它是否过时,然后再重新创建它(如果它确实过时),这比在每个请求中重新创建它的效率要低(大多数情况下)


我希望这能澄清问题。

除非您明确要求PHP在
$\u SESSION
中持久化,或者通过另一种缓存机制,否则PHP中不会持久化。我意识到,我想问的是,为什么框架不使用这些机制来持久化通常在框架初始化期间实例化的核心对象?什么类型的对象或数据(或在什么上下文中)更有效地持久化对象/数据?这取决于具体情况。通常,ID主要存储在会话中(例如,用户ID)。目标是使数据的大小尽可能小,因此可以用来检索对象的小块数据通常是存储的,而不是整个数据库模型或对象本身,通常在什么环境下会这样做?当您有很多数据想要频繁访问,但不是一堆内存值时,您会序列化一个对象并将其存储在内存中。例如,如果您有一个表示用户及其所有属性(用户名、密码、首选项等)的类,那么您将序列化该用户类的实例并将其存储在内存中。这将使跨页面处理变得更容易,但最终会遇到我前面提到的“数据新鲜度”问题。