我目前有外部JSON文件,PHP用它来设置请求的验证和过滤器。这样可以很容易地将文件的内容作为对象分配给变量。
$object = json_decode(file_get_contents($filepath));
我想知道是否有其他方法可以解决JSON问题?我仍然希望能够将文件的内容分配给变量运行时,但是有更好/更快的方法吗?
答案 0 :(得分:1)
Edit3:要为文件中的变量分配非静态内容,可以使用文件中的return
语句,然后包含该文件以将其分配给文件变量:
$var = include($file);
$file
必须是具有正确PHP语法的文件(请参阅include
Docs和return
语句。然后您就可以开始了。
因此,包含语言级别的eval
非常相似,所以要小心。
还有另一种方法,比如JSON是序列化,PHP中也有serialize
Docs和unserialize
Docs。
$object = unserialize(file_get_contents($filepath));
file_put_contents($filepath, serialize($object));
据说,这比json_encode
/ json_decode
慢(我没有测量过)。
它的好处是,对具体的PHP对象实例有更好的支持,它只是更好地与语言集成(难怪,因为它是核心PHP)。
编辑:如您所述,您需要手动编辑文件。 PHP序列化数据(默认情况下)不是非常人性化的读/编辑,因此您可能需要在XML中查找一些序列化:XML_Serializer
PEAR Package。另一个XML Serializer is available in Symfony2,它也支持其他格式(如JSON)。
另一种方法是将PHP序列化程序切换到WDDX(附带核心PHP),实际上是XML。
Edit2:类似于JSON for PHP:eval
和var_export
。但要注意这有点脏(或者更好说是邪恶的),具体类也需要支持这个(如果使用对象):
$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);
答案 1 :(得分:1)
听起来很复杂......我建议使用require_once();
它确实取决于这些文件中存储的内容。
php中还有另一种名为parse_ini_file();
[docs]的方法,但它只适用于键值对。