我在model层下建立User.php, User.php里有个方法getUserInfo来查询数据的,如下:
public function getUser()
{
return $this->where('id', 8)->find();
}
然后在controller控制器下, 实例化该用户模型, 调用实例的getUserInfo,打印数据
$userModel = new UserModel;
dump($userModel->getUser());
dump(json_encode($userModel->getUser()));
第一个打印出来的数据如下
object(app\index\model\User)#10 (32) {
["dateFormat":protected] => string(5) "Y/m/d"
["type":protected] => array(1) {
["birthday"] => string(9) "timestamp"
}
["insert":protected] => array(1) {
["status"] => int(1)
}
["connection":protected] => array(0) {
}
["parent":protected] => NULL
["query":protected] => NULL
["name":protected] => string(4) "User"
["table":protected] => NULL
["class":protected] => string(20) "app\index\model\User"
["error":protected] => NULL
["validate":protected] => NULL
["pk":protected] => NULL
["field":protected] => array(0) {
}
["readonly":protected] => array(0) {
}
["visible":protected] => array(0) {
}
["hidden":protected] => array(0) {
}
["append":protected] => array(0) {
}
["data":protected] => array(7) {
["id"] => int(8)
["nickname"] => string(4) "1111"
["name"] => string(4) "c某"
["password"] => string(6) "111111"
["create_time"] => int(0)
["update_time"] => int(0)
["status"] => int(0)
}
["origin":protected] => array(7) {
["id"] => int(8)
["nickname"] => string(4) "1111"
["name"] => string(4) "c某"
["password"] => string(6) "111111"
["create_time"] => int(0)
["update_time"] => int(0)
["status"] => int(0)
}
["relation":protected] => array(0) {
}
["auto":protected] => array(0) {
}
["update":protected] => array(0) {
}
["autoWriteTimestamp":protected] => bool(true)
["createTime":protected] => string(11) "create_time"
["updateTime":protected] => string(11) "update_time"
["isUpdate":protected] => bool(true)
["updateWhere":protected] => array(1) {
["id"] => array(2) {
[0] => string(2) "eq"
[1] => int(8)
}
}
["failException":protected] => bool(false)
["useGlobalScope":protected] => bool(true)
["batchValidate":protected] => bool(false)
["resultSetType":protected] => string(5) "array"
["relationWrite":protected] => NULL
}
而调用json_encode方法打印json是这样子
string(132) "{"id":8,"nickname":"1111","name":"c\u67d0","password":"111111","create_time":"1970\/01\/01","update_time":"1970\/01\/01","status":0}"
我自己测试json_encode的value如果是对象,则会输出对象的公共属性, 测试代码如下:
class TestClass
{
public $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
var_dump(json_encode($class));
打印出则是string(15) "{"foo":"Hello"}" , 为什么thinkphp下的json_encode会打印这样的数据
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
原来在thinkphp5下的Model.php实现了JSON 序列化接口, 调用了Model.php的toArray方法,所以json_encode才会输出这样的数据出来.
实现 JsonSerializable 的类可以在 json_encode() 时定制他们的 JSON 表示
// JsonSerializable
public function jsonSerialize()
{
return $this->toArray();
}
参考资料:
JSON 序列化接口
- 1 回答
- 0 关注
- 1478 浏览
添加回答
举报
0/150
提交
取消