如何将PHP对象写入和读取文本文件?

20

我想把一个PHP对象写入文本文件中。PHP对象的形式如下:

 $obj = new stdClass();
 $obj->name = "My Name";
 $obj->birthdate = "YYYY-MM-DD";
 $obj->position = "My position";

我想将这个$obj写入文本文件中。该文本文件位于此路径。

$filePath = getcwd().DIRECTORY_SEPARATOR."note".DIRECTORY_SEPARATOR."notice.txt"

我希望有一种简单的方法将这个对象写入文本文件,并且希望能够读取文件以获取我定义的属性。请帮助我。

提前感谢您的帮助。

3个回答

29
你可以使用以下代码将php对象写入文本文件...
$obj = new stdClass();
$obj->name = "My Name";
$obj->birthdate = "YYYY-MM-DD";
$obj->position = "My position";

$objData = serialize( $obj);
$filePath = getcwd().DIRECTORY_SEPARATOR."note".DIRECTORY_SEPARATOR."notice.txt";
if (is_writable($filePath)) {
    $fp = fopen($filePath, "w"); 
    fwrite($fp, $objData); 
    fclose($fp);
}

读取文本文件以获取您定义的属性...

$filePath = getcwd().DIRECTORY_SEPARATOR."note".DIRECTORY_SEPARATOR."notice.txt";
if (file_exists($filePath)){
    $objData = file_get_contents($filePath);
    $obj = unserialize($objData);           
    if (!empty($obj)){
        $name = $obj->name;
        $birthdate = $obj->birthdate;
        $position = $obj->position;
    }
}

完美!我喜欢这个。非常感谢。 - Nantu
is_writable($filePath) 对我没有起作用,因为它包括了文件。我的路径实际上是可写的,但是没有文件名时 is_writable 只返回 true。 - Ralf

9

在将$obj保存到文件之前,您可以使用serialize()对其进行序列化,然后使用unserialize()获取整个对象:

 $obj = new stdClass();
 $obj->name = "My Name";
 $obj->birthdate = "YYYY-MM-DD";
 $obj->position = "My position";
 $objtext = serialize($obj);
 //write to file

稍后您可以使用unserialize()函数进行反序列化:
 $obj = unserialize(file_get_contents($file));
 echo $obj->birthdate;//YYYY-MM-DD

1
我们可以使用以下方法将整个对象写入文件中。
$fp = fopen('D:\file_name.txt', 'w');        
fwrite($fp, print_r($obj, true));
fclose($fp);

因此,在print_r()函数中,我们需要传递对象和true参数,该参数将返回信息到fwrite()函数而不是打印它。

你如何再次阅读 print_r 的结果? - Koorosh
@Koorosh 一旦你将对象写入文件中,你可以轻松地在其中检查所需的值。 - Exception

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接