Php 是否将文件内容分配给对象?
我目前有外部JSON文件,PHP用来设置请求的验证和过滤器。这使得将文件内容作为对象分配给变量变得容易Php 是否将文件内容分配给对象?,php,json,serialization,Php,Json,Serialization,我目前有外部JSON文件,PHP用来设置请求的验证和过滤器。这使得将文件内容作为对象分配给变量变得容易 $object = json_decode(file_get_contents($filepath)); 我想知道是否有其他方法可以做到这一点,而不需要解析JSON?我希望仍然能够将文件的内容分配给变量运行时,但是有更好/更快的方法吗?Edit3:要从文件中为变量分配非静态的内容,可以使用文件中的return语句,然后将文件包括在内以将其分配给变量: $var = include($file
$object = json_decode(file_get_contents($filepath));
我想知道是否有其他方法可以做到这一点,而不需要解析JSON?我希望仍然能够将文件的内容分配给变量运行时,但是有更好/更快的方法吗?Edit3:要从文件中为变量分配非静态的内容,可以使用文件中的
return
语句,然后将文件包括在内以将其分配给变量:
$var = include($file);
$file
必须是具有正确PHP语法的文件(请参阅和return
语句)。然后就可以开始了
因此,Include在语言级别上与eval
非常相似,所以要小心
还有另一种方法,就像JSON是序列化一样,PHP中也有和
$object = unserialize(file_get_contents($filepath));
file_put_contents($filepath, serialize($object));
据说,这比使用json_encode
/json_decode
要慢(我没有测量它)
它的好处是,它更好地支持具体的PHP对象实例,只是更好地与该语言集成(难怪它是PHP的核心)
编辑:如评论所述,您希望手动编辑文件。PHP序列化数据(默认情况下)不太便于人工读取/编辑,因此您可能会在XML中查找一些序列化:。另一个序列化也支持其他格式(如JSON)
另一种选择是将PHP序列化程序切换到(随核心PHP一起提供),实际上是XML
Edit2:对于PHP,有一些类似于JSON的东西:eval
和var\u export
。但是要注意这有点脏(或者说是邪恶),具体的类也需要支持这一点(如果使用对象的话):
听起来很复杂……我建议使用
require_once();
但这取决于这些文件中存储的内容
php中还有另一种方法叫做
parse_ini_file();
[]但它只适用于键值对。很难。如果你想在PHP中使用JSON,你需要解析它。没有办法it@Pekka我知道,但也许有一种方法可以在不使用JSON的情况下完成同样的事情。@dqhendricks好吧,你可以用PHP文件来代替?定义数组或类?这是唯一想到的另一种方法@Lekensteyn澄清一下,使用JSON不是一项要求。@hakre哇,这很酷。包含文件的全局空间中的return语句允许使用文件内容进行赋值。请将其放在答案中?慢一点,然后我必须将其从php中保存以进行序列化。我希望能够手动编辑该文件。您可以编辑序列化数据手动操作时,您可能需要一个十六进制编辑器,并且知道自己在做什么。这是一个糟糕的笑话。您可能正在寻找XML序列化,它存在,将添加一个指向答案的链接。据说parse_ini_file
非常快。不幸的是,parse ini无法工作,因为数据的结构不仅仅是键值对。我会使用它p类文件,如果您担心性能,那么使用memcache-@dqhendricks之类的东西,可能会有一个通用php类,其中包含所有验证要求,其特定过程由INI文件中的KVP定义?从内存中,parse INI文件有节和键值对,但这是其粒度的限制。在进一步研究之后,sections功能允许我创建一个可以使用ini文件的数据结构。谢谢!
$var = array('prop' => 'some value');
ob_start();
var_export($var);
$buffer = ob_get_clean();
# $buffer now contains something that can be saved,
# to load it again:
$var = eval('return '.$buffer.';');
var_dump($var);