前台页面实现、Smarty
static 和 GLOBALS的区别
相同点:生命周期是一样的,声明的时候产生,页面执行完毕销毁。
不同点:
超全局变量在所有的地方都能使用
静态变量只能在自己的作用域中访问
如果一个函数内没有区别,两个函数只能GLOBALS作用域不同
前台显示
实现方法:
1、递归
2、三重循环
在开发的时候能不用递归就不用递归,因为递归消耗资源比较多;如果确定就显示三级就用三重循环来实现
方法一:通过模糊查询select * from goods where `goods_status` like '%hot%';
模糊查询,以
%
百分号开头的查询无法使用索引,只能是全表扫描。效率低下
方法二:使用find_in_set(值,集合)select * from goods where find_in_set('best',`goods_status`);
优化了方法一,效率提高了。但
find_in_set()
函数本身是个全表扫描的函数
方法三:使用位运算符
查找best:select * from goods where goods_status & 1;
查找既有best又有hot同时存在:select * from goods where goods_status & 1 and goods_status & 4
集合和枚举一样,在计算机内部都是通过数值管理的。
要想看有没有那个参数,就与上那个参数就可以了。&
best => 001
new => 010
hot => 100
测试:select goods_status,goods_status+0 from goods;
best,new 3
best,new,hot 7
new,hot 6
best+hot
101
&001
001
已知集合占用8个字节,一个字节8个位,8个直接64个位,所有集合最多可以保存64个选项
模板引擎
引擎和框架是有区别的。
我们现在开发的项目,前段代码和服务器端代码同在一个页面中。这样前端和服务器端看起来都不方便。为了让所有的项目开发人员。只关注自己的业务,我们将表现(HTML)和内容(PHP)相分离。
模板引擎 推导
简而言之,界定符的优化。将输出变量更改一下形式
光说不练假把式
将替换的结果当成字符串输出了。
模板引擎的思想四步法:
file_get_contents();
获取表现内容str_replace();
定义左右定界符file_put_contents();
输出混编文件require();
引入混编文件
1 |
|
模板引擎封装
1 |
|
输出:<?php echo $this->tpl_var[$key]?>
外部调用1
2
3
4require './Smarty.class.php'; //加载类文件
$smarty = new Smarty(); //实例化对象
$smarty->assgin('title',$title); //赋值操作
$smarty->compile(); //编译输出文件
如何判断混编文件不是最新的?
模板的创建时间在混编文件之前
int filemtime ( string $filename )
将模板文件和混编文件分开存储
- templates
- templates_c
一般来说,关键性代码都是私有,通过公有的方法来调用它;
- 将complie() 方法用private来修饰,用一个公有的方法来调用display()调用