我想创建一个我可以使用的简单类,并将其编码为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);
时,我只会打印最后一张照片,对吗?
答案 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
对象放入数组中。