美文网首页php面试全栈工程师iOS Developer
iOS 全栈攻城狮(PHP) —— Session 5

iOS 全栈攻城狮(PHP) —— Session 5

作者: PonyCui | 来源:发表于2015-12-25 00:13 被阅读534次

    JSON

    大部分客户端和服务器端的数据交换协议都是JSON,JSON有很多优点,它兼容性强、使用方便、解析效率不低。

    PHP 中 JSON 的编解码

    JSON 在 PHP 中的使用非常简单,以下是一个 PHP 生成 JSON 字符串的例子。

    <?php
    $arr = [1, 2, 3];
    echo json_encode($arr);
    

    我们定义了一个数组,然后使用 json_encode($arr) 将数组编码为 JSON 字符串,然后直接输出。

    同样的,使用 PHP 解析 JSON 也非常方便。

    <?php
    $json_str = '{"name": "Pony"}';
    $json_arr = json_decode($json_str, true);
    echo $json_arr["name"];// print Pony
    

    之所以易用,是因为PHP的代码同步执行以及PHP对类型的不敏感, 为什么这样说,接下去看吧。

    字典、数组类型错乱

    JSON和PHP绝对不是一对好组合,PHP 会将弱类型的所有缺点带进 JSON。

    正如大家所知,PHP 对数组、字典并没有严格地区分。如果某一天,你与服务器端约定一个字段应该返回数组,但是却异常地返回了字典。那可能是下面这种情况。

    <?php
    $arr = [0, 1, 2, 3, 4];
    echo json_encode($arr); //[0,1,2,3,4]
    unset($arr[1]);
    echo json_encode($arr); //{"0":0,"2":2,"3":3,"4":4}
    

    这个时候,你可能在心里暗暗地骂娘……
    但是,客户端真的需要多留意这些地方,多作判断。因为,你根本不知道 PHP 程序员的代码习惯。

    字符串、数字类型错乱

    PHP 对数字、字符串也是不敏感的…… 因此,如果你与 PHP API 约定一个字段为字符串,那它很有可能返回一个数字给你,就像下面这样。

    <?php
    $a = 1;
    $b = "2";
    $c = $a + b;
    $arr = ["str"=> $c];
    echo json_encode($arr); // print {"str":1}
    

    最保险地做法是在输出JSON前,对变量进行类型强制转换。

    <?php
    $a = 1;
    $b = "2";
    $c = $a + b;
    $arr = ["str"=> (string)$c];
    echo json_encode($arr); // print {"str":"1"}
    

    但是,你仍然不能保证每个程序员都这样做,更糟糕地是,从数据库中取出的数据,类型完全不能确定!

    可能返回一个 Null

    假如一个变量在中途丢失了,或者没有被初始化,然后就塞入一个数组、字典,PHP并不会报错,而是输出一个 Null 到 JSON中。

    <?php
    $arr = ["str"=> $c];
    echo json_encode($arr);
    

    这,就是所有iOS程序员的噩梦…… 作为iOS猿,你只能多作判断。 作为一个PHP程序员,我仍然建议对每个输出变量进行强转,就像下面的代码,则不会出现问题。

    <?php
    $arr = ["str"=> (string)$c];
    echo json_encode($arr);
    

    结语

    对于PHP的JSON编解码,并没有什么难度。
    但是,一个优秀的PHP程序员,应该认识到PHP的局限性,并且对接口的质量要有更深刻的认识。
    同样的,一个合格的iOS程序员,理应对外部的输入作更多的判断,这样才能保证应用不因接口格式错误而直接崩溃。

    愿此文能让iOS程序员和PHP程序员加深彼此认识。

    相关文章

      网友评论

      • 8ae158dda3f2:问个问题,iOS端怎样使用session 记录状态
      • 寒枫傲天:这个系列可以继续下去啊 !!!!

      本文标题:iOS 全栈攻城狮(PHP) —— Session 5

      本文链接:https://www.haomeiwen.com/subject/imgvhttx.html