• 「七天自制PHP框架」应用:JSON生成器


    刚刚开始学做一个WebAPP,数据查询的一般套路是通过一张PHP页面读取数据库,获得列表后“嵌写”在PHP页面中,虽然写法上丑陋至极,但也有“快糙猛”出效果的成就感,如图。

    后来想想,不对啊,难道以后PHP就全这么写?还是只有这个语言是这么写?搞了搞ASP.NET,代码的美观程度也好看不到哪里去啊,“嵌写”是水平的问题,不能怪语言。于是有了新想法。

    那个时候做开发时,数据的交互大量使用JSON和XML,从使用的方便角度,JSON更适合Web,于是突发奇想,干脆所有数据交互全部用JSON,连同PHP页面也当做一个JS文件来读取,于是有了这样一张流程。

    使用LINK方式链接JS文件,还是用AJAX来带回JSON,这个本质上只是同步和异步的差别,但是不管怎样,代码的可维护性已经高很多了,因为JSON的处理,完全可以由JavaScript解决。

    最近几天在忙着开发一个历史类APP,数据很多,但有个特征:“查多改少”,甚至几乎没有“增删改”,几乎都是“查”。为了把交互体验做到最快,所有的数据全部压缩成一个JS文件。得益于前端框架,交互性能好的一塌糊涂。

    回到我们以前开发的PHP框架,我们新建一个Model,来创建JSON,这个Model用来管理欧洲大事件的数据表

    class EuropeModel extends Model{
    	public static $data;
    	public static $name;
    	public $start_t;
    	public function __construct(){
    		parent::__construct();
    		$this::$name='europe_event';
    		$this::$table='europe';
    		$this::$primary_key='start_t';
    	}
    }
    

    在控制器里获取数据

    class EuropeController extends Controller{
    	public function Show($parameters=[]){
    		
    		$EuropeModel=new EuropeModel();
    		$EuropeModel::$data=$EuropeModel::all();
    		$DPaperList=$EuropeModel::all();
    		
    		render('create.html.php',['data'=>$DPaperList]);
    	}
    }
    

    最后可以在HTML页面中查看一下这个JSON

    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<title>数据压缩Json</title>
    	<meta charset="utf-8">
    </head>
    <body>
    <?php
    
    echo "var json=".json_encode($data);
    $myfile=fopen("json.txt","w") or die("Unable to open file!");
    $txt="var json=".json_encode($data);
    fwrite($myfile,$txt);
    fclose($myfile);
    
    ?>
    </body>
    </html>
    

    如果数据全部导出为JSON,那么数组的数字索引已经没有存在的必要了,因为数字索引和字符串索引只需要有1个,以免造成存储空间的浪费。

    这里引入PHP官网的文档,在DB访问层就可以设置一个BOOLEAN变量来规定导出的数组索引

    <?php
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");
    
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s
    ", mysqli_connect_error());
        exit();
    }
    
    $query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
    $result = mysqli_query($link, $query);
    
    /* numeric array */
    $row = mysqli_fetch_array($result, MYSQLI_NUM);
    printf ("%s (%s)
    ", $row[0], $row[1]);
    
    /* associative array */
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    printf ("%s (%s)
    ", $row["Name"], $row["CountryCode"]);
    
    /* associative and numeric array */
    $row = mysqli_fetch_array($result, MYSQLI_BOTH);
    printf ("%s (%s)
    ", $row[0], $row["CountryCode"]);
    
    /* free result set */
    mysqli_free_result($result);
    
    /* close connection */
    mysqli_close($link);
    ?>
    

    本文为博主原创文章,转载请在明显位置注明出处: http://www.cnblogs.com/sweng

    本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。

  • 相关阅读:
    on、where、having的区别和关系
    Java知识点补缺
    Hive部署到IDEA报错 Hive Schema version 2.1.0 does not match metastore's schema version 1.2.0 Metastore is not upgraded or corrupt 解决方案
    Hive知识点总结
    区分同步与异步、阻塞与非阻塞
    Hive查询分区元数据,PARTITIONED BY
    单例模式总结
    Sql语句执行顺序
    收藏大数据相关面试题比较好的链接
    实习技能
  • 原文地址:https://www.cnblogs.com/sweng/p/9398453.html
Copyright © 2020-2023  润新知