OOP PHP-对对象进行JSON编码

OOP PHP-对对象进行JSON编码,php,json,oop,Php,Json,Oop,我想创建一个简单的类,可以使用它并将其编码为json字符串。我的目标是用页面上所有照片的信息对json对象进行编码。以前从未使用过面向对象的php,但我尝试过: class Photo { public $file; public $date; function __construct($filename, $datetime) { $file = $filename; $date = $datetime; } } 循环浏览我的照片并为每张照片创建一个新的类实例: $ph

我想创建一个简单的类,可以使用它并将其编码为
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\u-encode($photo)显示文件名和日期时间为空。当我使用echo json_encode($photo)时,我只打印最后一张照片,对吗

您需要在类中使用$this->varName来使用类成员

所以你的构造函数应该是

function __construct($filename, $datetime) 
{
    $this->file = $filename;
    $this->date = $datetime;
}
正如@code_burgar所说:需要使用数组

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

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

function __construct($filename, $datetime) 
{
    $this->file = $filename;
    $this->date = $datetime;
}
我鼓励您阅读

尝试以下内容:

class Photo
{
 public $file;
 public $date;

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

}
如果您想保留所有照片对象,可以这样做

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

然后使用
foreach()
循环访问它们

以上答案是正确的,您需要使用$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');

其他人回答了你的第一个问题。要更新对象的成员,必须在对象的上下文中使用
$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);
   }
}

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

只是
的一个小错误。
。使用
$my_photos->add_photos('test.jpg','2011-01-01')