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,ArrayObjectArrayIterator实例保存;
  • 缺少类抛出一个ClassNotFoundException而不是被非系列化PHP_Incomplete_Class对象;
  • 反射*,IteratorIteratorRecursiveIteratorIterator类序列化时抛出异常。

导出的数据是一个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,ArrayIteratorSplObjectHash可以通过使用创建特别的东西吗“\ 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许可证。