Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 zend注册表与zend缓存_Php_Zend Framework - Fatal编程技术网

Php zend注册表与zend缓存

Php zend注册表与zend缓存,php,zend-framework,Php,Zend Framework,zend registry和zend Cache之间的区别是什么?我们应该在哪些场景中使用它们。 下面这一行让我很困惑。 $cache = Zend_Registry::get('cache'); 注册表通常是一个全局对象,其他对象可以使用它来查找公共对象和服务。您可能认为它是应用程序的中心、全局对象存储。注册表将对象保存在内存中以便快速访问。应用程序的各个部分或模块可以完全分离,只有一个依赖项:注册表 有人说,在应用程序中使用注册表会导致糟糕的设计,因为它只引入了另一个全局变量或迫使您传递此

zend registry和zend Cache之间的区别是什么?我们应该在哪些场景中使用它们。 下面这一行让我很困惑。

$cache = Zend_Registry::get('cache');

注册表通常是一个全局对象,其他对象可以使用它来查找公共对象和服务。您可能认为它是应用程序的中心、全局对象存储。注册表将对象保存在内存中以便快速访问。应用程序的各个部分或模块可以完全分离,只有一个依赖项:注册表

有人说,在应用程序中使用注册表会导致糟糕的设计,因为它只引入了另一个全局变量或迫使您传递此对象。该模式称为服务定位器,属于体系结构模式的范畴

在您提供的示例中,缓存对象是从注册表中提取的,以便使用它。这意味着,缓存对象在之前设置为注册表(在应用程序流中的某个时间)

缓存是一种对象,它提供了比正常访问更快地存储和检索数据的功能。您节省了重新计算数据或从原始存储位置提取数据的时间,这会更慢。这是一种优化技术。一个很好的例子是在访问数据库的磁盘上的基于内存的缓存

--

在哪些情况下您会使用它们?让我们把这两个问题联系起来

如何更快地访问数据?

一种可能是在两者之间放置一个缓存对象。 其次是其他加快数据获取速度的优化技术,如正确索引数据库等

如何在我的应用程序中获取对象?

一种可能是将它们存储到注册表中,以便以后重用。 其次是其他对象获取或注入技术

参考


我想您可能会因为Zend文档中的示例而感到困惑。他们将缓存对象保存在注册表中以供以后使用

目的:

  • Zend Registry用于全局范围。比如在PHP中使用变量。您可以将变量(或数组或对象)保存在注册表中,然后在需要时从任何位置(控制器、视图、模型等)获取它

  • Zend Cache用于提高应用程序性能和优化

差异:

  • Zend注册表:该值仅用于当前页面请求。当前进程结束时,该值将被销毁

  • Zend缓存:该值用于即将到来的页面请求。当前进程结束时,该值为未销毁(该值保存在文件中)

示例:

  • Zend Registry:设置数据库连接一次,在注册表中添加连接,然后每次需要任何文件中的连接时,只需从注册表中获取它

  • Zend Cache:您从数据库中获取了一个大表,处理该表需要5秒钟(假设本例中的表内容从未更改)。将其保存在缓存中。对于即将到来的请求,不是再次从数据库获取表,而是从缓存获取表以加快此过程,这将需要0.1秒