OOP PHP - JSON编码对象

时间:2011-04-23 13:52:35

标签: php json oop

我想创建一个我可以使用的简单类,并将其编码为json字符串。我的目标是使用关于页面上所有照片的信息对json对象进行编码。从来没有使用过面向对象的php,但我试了一下:

class Photo
{
public $file;
public $date;

function __construct($filename, $datetime) 
{
    $file = $filename;
    $date = $datetime;
}

}

循环浏览我的照片并为每张照片创建一个新的课程实例:

$photo = new Photo($filename, $date);

2个问题:echo json_encode($photo);向我显示filename和datetime为null。当我使用echo json_encode($photo);时,我只会打印最后一张照片,对吗?

5 个答案:

答案 0 :(得分:4)

您需要在班级

中使用$ this-> varName来使用班级成员

所以你的构造函数应该是

function __construct($filename, $datetime) 
{
    $this->file = $filename;
    $this->date = $datetime;
}

正如@code_burgar所说:需要使用数组

$photo[] = new Photo($filename, $date);

答案 1 :(得分:3)

您需要确保使用$this引用您的实例变量。例如:

function __construct($filename, $datetime) 
{
    $this->file = $filename;
    $this->date = $datetime;
}

我建议您阅读PHP's OOP Reference

答案 2 :(得分:2)

尝试:

class Photo
{
 public $file;
 public $date;

 function __construct($filename, $datetime) 
   {
       $this->file = $filename;
       $this->date = $datetime;
   }

}

如果您想保留所有照片对象,可以

$photos[] = new Photo($file,$date);

然后使用foreach()循环

访问它们

答案 3 :(得分:1)

以上答案是正确的,您需要使用 $ this

试试这个:

class Photos {
   private $photos = array();

   function add_photo($filename, $date) {
      $this->photos[] = array('filename' => $filename, 'date' => $date);
      return $this;
   }

   function get_all() {
      return json_encode($this->photos);
   }
}


$my_photos = new Photos();

$my_photos->add_photo('test.jpg', '2011-01-01');

echo $my_photos->get_all();

编辑: 忘记提及,你也可以链接add_photo方法:

$my_photos->add_photo('test.jpg', '2011-01-01')->add_photo('test.jpg', '2011-01-01');

答案 4 :(得分:1)

其他人回答了你的第一个问题。要更新对象的成员,必须在对象的上下文中使用$this。在外部,使用引用对象的变量,因为您的成员是公共的:

class Photo {
   public $file;
   public $date;
}
$photo = new Photo;
$photo->file = 'file';
$photo->date = time();
echo json_encode($photo);

公开公开对象的成员并不是一个好的设计实践,但json_encode()不会将非公共成员添加到json字符串中,因此您需要自己的编码方法来执行此路由:

class Photo {
   private $file;
   private $date;
   public function __construct($file, $date) {
      $this->file = $file;
      $this->date = $date;
   }
   public function __encode() {
      $json = new stdClass;
      foreach (get_object_vars($this) as $name => $value) {
         $this->$name = $value;
      }
      return json_encode($json);
   }
}

您的第二个问题似乎暗示您可能希望将多张照片全部存储为Photo对象。您可以将多个Photo对象放入数组中。

相关问题