Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 是否将文件内容分配给对象?_Php_Json_Serialization - Fatal编程技术网

Php 是否将文件内容分配给对象?

Php 是否将文件内容分配给对象?,php,json,serialization,Php,Json,Serialization,我目前有外部JSON文件,PHP用来设置请求的验证和过滤器。这使得将文件内容作为对象分配给变量变得容易 $object = json_decode(file_get_contents($filepath)); 我想知道是否有其他方法可以做到这一点,而不需要解析JSON?我希望仍然能够将文件的内容分配给变量运行时,但是有更好/更快的方法吗?Edit3:要从文件中为变量分配非静态的内容,可以使用文件中的return语句,然后将文件包括在内以将其分配给变量: $var = include($file

我目前有外部JSON文件,PHP用来设置请求的验证和过滤器。这使得将文件内容作为对象分配给变量变得容易

$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);