thinkphp5下json_encode问题

发布于 2022-09-06 22:05:53 字数 3419 浏览 12 评论 0

  1. 我在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会打印这样的数据

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凝望流年 2022-09-13 22:05:53

原来在thinkphp5下的Model.php实现了JSON 序列化接口, 调用了Model.php的toArray方法,所以json_encode才会输出这样的数据出来.

实现 JsonSerializable 的类可以在 json_encode() 时定制他们的 JSON 表示

// JsonSerializable
public function jsonSerialize()
{
    return $this->toArray();
}

参考资料:
JSON 序列化接口

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文