VarExporter组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
VarExporter组件
VarExporter组件出口任何纯PHP代码和数据结构序列化PHP允许实例化和填充对象,而不调用它们的构造函数。
安装
1
美元作曲家要求- dev symfony / vaob娱乐下载r-exporter
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
出口/序列化变量
这个组件的主要特征是序列化PHP数据结构简单的PHP代码,类似于PHP的var_export功能:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\VarExporter\VarExporter;美元出口= VarExporter::出口(美元someVariable);/ / $导出的数据存储在一些文件或缓存系统,以备重用美元数据=写入“exported.php”,美元出口);/ /后,重新生成原始变量,当你需要它美元regeneratedVariable=需要“exported.php”;
使用这个组件而不是的原因serialize ()
或igbinary
是性能:谢谢OPcache,生成的代码更快,效率比使用更多的内存unserialize ()
或igbinary_unserialize ()
。
此外,有一些细微的区别:
- 如果原始变量定义,所有相关的语义
serialize ()
(如__wakeup ()
,__sleep ()
,可序列化的
)保存(var_export ()
忽略了他们); - 引用涉及
SplObjectStorage
,ArrayObject
或ArrayIterator
实例保存; - 缺少类抛出一个
ClassNotFoundException
而不是被非系列化PHP_Incomplete_Class
对象; 反射*
,IteratorIterator
和RecursiveIteratorIterator
类序列化时抛出异常。
导出的数据是一个PSR-2兼容的PHP文件。考虑例如下面的类层次结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
文摘类AbstractClass{受保护的美元喷火;私人美元酒吧;受保护的函数setBar(美元酒吧){美元这- >酒吧=美元酒吧;}}类ConcreteClass扩展AbstractClass{公共函数__construct(){美元这- >foo =123年;美元这- >setBar (234年);}}
当出口ConcreteClass
数据与VarExporter,生成PHP文件是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< ? php返回\ob娱乐下载 Symfony \ \ VarExporter \ \水合器内部组件::水合物(美元o= (克隆(\ob娱乐下载 Symfony \内部组件\ VarExporter \ \注册表::$原型(“ob娱乐下载Symfony \ \测试组件\ \ VarExporter \ \ \ \ ConcreteClass ')? ?\ob娱乐下载 Symfony \内部组件\ VarExporter \ \注册表::p (“ob娱乐下载Symfony \ \测试组件\ \ VarExporter \ \ \ \ ConcreteClass '),),零,(“ob娱乐下载Symfony \ \测试组件\ \ VarExporter \ \ \ \ AbstractClass '= > [“foo”= > [123年),“酒吧”= > [234年,,,,美元o(0],[]);
PHP类实例化
该组件提供的另一个主要特性是一个instantiator可以创建对象并设置它们的属性,而不调用它们的构造函数或任何其他方法:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\VarExporter\Instantiator;/ /创建一个空Foo的实例美元fooObject= Instantiator::实例化(Foo::类);/ /创建一个Foo实例并设置其属性之一美元fooObject= Instantiator::实例化(Foo::类,“propertyName”= >美元propertyValue]);/ /创建一个Foo实例并设置在其母酒吧类定义的私有财产美元fooObject= Instantiator::实例化(Foo::类,[],[酒吧::类= > [“privateBarProperty”= >美元propertyValue)));
的实例ArrayObject
,ArrayIterator
和SplObjectHash
可以通过使用创建特别的东西吗“\ 0”
属性名称来定义他们的内在价值:
1 2 3 4 5 6 7 8 9
/ /创建一个SplObjectHash info1关联到中的object1美元,等等。美元对象= Instantiator::实例化(SplObjectStorage::类,“\ 0”= > [美元中的object1,美元info1,美元object2,美元info2…]]);/ /创建一个ArrayObject填充inputArray美元美元对象= Instantiator::实例化(ArrayObject::类,“\ 0”= > [美元inputArray]]);
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。