将文件内容分配给对象?

时间:2011-10-04 19:27:21

标签: php json serialization

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

$object = json_decode(file_get_contents($filepath));

我想知道是否有其他方法可以解决JSON问题?我仍然希望能够将文件的内容分配给变量运行时,但是有更好/更快的方法吗?

2 个答案:

答案 0 :(得分:1)

Edit3:要为文件中的变量分配非静态内容,可以使用文件中的return语句,然后包含该文件以将其分配给文件变量:

$var = include($file);

$file必须是具有正确PHP语法的文件(请参阅includeDocsreturn语句。然后您就可以开始了。

因此,包含语言级别的eval非常相似,所以要小心。


还有另一种方法,比如JSON是序列化,PHP中也有serializeDocsunserializeDocs

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

Sandbox

答案 1 :(得分:1)

听起来很复杂......我建议使用require_once();

收集调用时包含的php类文件集合

它确实取决于这些文件中存储的内容。

php中还有另一种名为parse_ini_file(); [docs]的方法,但它只适用于键值对。