【问题标题】:log multidimensional array of objects php记录对象的多维数组php
【发布时间】:2014-02-25 15:33:19
【问题描述】:

我必须在文件中记录以下对象数组,然后读取它。 我的变量是 $myObject。 var_dump($myObject) 给出以下数组:

array(1) {
  [0]=>
  object(MyClassA)#179 (2) {
    ["_flag":protected]=>
    bool(false)
    ["_myClassB":protected]=>
    array(1) {
      [0]=>
      object(MyClassB)#187 (5) {
        ["_flag":protected]=>
        bool(false)
      }
    }
  }

MyClassA 和 MyClassB 是另外两个类。

我怎样才能记录和检索它。检索后,我想在检索后使用 MyClassA 的方法,例如 MyClassA->getFlag。

我正在使用以下方法记录它:

$fp = fopen("myfilepath", 'a');
fputcsv($fp, serialize( $myObject));
fclose($fp);

但它以不可读的格式登录。

谢谢

解决方案:

我认为序列化以可读格式创建内容。但我很破旧。当我对数据进行反序列化时,我能够获取数据。 :)

【问题讨论】:

  • 我知道在 Java、C# 中......你有一种叫做“序列化”的东西来存储对象并检索它们。我不了解 PHP,但我想这可能是一个很好的起点?
  • 我试过序列化。但它不能序列化对象内部的对象。存储的日志文件不可读。
  • 那么应该以可读的格式保存吗?还是只能通过代码读取?编辑:给每个类(如果它以这种方式工作)一个“可序列化”参数怎么样?
  • 你为什么使用'fputcsv'?尝试 fputs() 或 file_put_contents()
  • 让我尝试反序列化它。我想当我们通过序列化记录它时,日志文件应该具有可读格式的内容。

标签: php logging serialization json


【解决方案1】:
$stringToSaveInFile = serialize($array);

重复使用:

$array = unserialize($stringToSaveInFile)

第一个函数(序列化)将您的数组/对象转换为一个字符串,您可以将其保存在您想要的位置...之后,当您再次读取该字符串时,您可以通过'反序列化'函数

编辑

看这个例子(编辑以将数据保存在文件中):

class A
{
    public function ciao() {
        echo "CIAO";
    }
}

class B
{
    public function hello() {
        echo "HELLO";
    }
}

$a = array(new A, new B);
$ser = serialize($a);
file_put_contents('mydata.txt', $ser);
$uns = file_get_contents('mydata.txt');
$uns[0]->ciao();

【讨论】:

  • 当我序列化它时,MyClassA 和 MyClassB 没有序列化,我得到了一个不可读的文件。我用来记录它的方法已在我的问题中更新。
  • mhh 也许我不了解您的需求.. 要获取您发布的代码,我认为您有用户 var_dump($array) 或类似的东西吗?好的,要保存它,然后再使用它,你必须序列化它,然后像我写的那样反序列化它。如果你不想要它对不起,但我不明白
  • 检查最后一次编辑。请注意,要使用 MyClassA 和 MyClassB,您必须在反序列化数据时包含类文件。您正在保存对象,而不是类定义
  • 我可以找回它。我认为序列化以可读格式创建内容。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2012-10-07
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多