为了账号安全,请及时绑定邮箱和手机立即绑定

thinkphp5下json_encode问题

thinkphp5下json_encode问题

PHP
浮云间 2019-03-18 15:31:57
我在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 序列化接口

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 1385 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信