将文件的内容分配给对象


Assigning contents of file to an object?

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

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

我想知道是否有另一种方法来做到这一点,不涉及解析JSON?我想仍然能够分配一个文件的内容到一个可变的运行时,但有一个更好/更快的方法来做到这一点?

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

在调用时包含一个php类文件集合。

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

在php中有另一个方法叫做parse_ini_file(); [docs],但是它只适用于键值对。

Edit3:要将非静态的东西赋值给文件中的变量,可以在文件中使用return语句,然后包含该文件以将其赋值给变量:

$var = include($file);

$file必须是一个具有正确PHP语法的文件(参见include Docsreturn语句)。然后你就可以出发了。

因此,

Include在语言级别上与eval非常相似,所以要小心。


还有另一种方式,就像JSON是序列化一样,在PHP中也有serialize Docsunserialize Docs
$object = unserialize(file_get_contents($filepath));
file_put_contents($filepath, serialize($object));

据说,这比json_encode/json_decode慢(我没有测量过)。

它的好处是,对具体的PHP对象实例有更好的支持,它只是更好地与语言集成(难怪,因为它是核心PHP)。

Edit:如前所述,您希望手动编辑文件。PHP序列化的数据(默认情况下)对人类的阅读/编辑不太友好,因此您可能会寻找一些序列化到XML的方法:XML_Serializer PEAR Package。另一个XML序列化器在Symfony2中可用,它也支持其他格式(如JSON)。

另一种选择是将PHP序列化器切换到WDDX(核心PHP附带的),它实际上是XML。

Edit2:有一些类似于JSON的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);

沙箱