框架开发-PSR/命名空间/trait/smarty
PSR 编码规范
1 | PHP编码规范PSR(中文版) |
====================================
PDO
- 复习 PDO
- 实例化PDO DSN: mysql:host=127.0.0.1;dbname=xx
- 设置PDO的连接属性: setAttribute()
- 是否自动提交
属性
值PDO::ATTR_AUTOCOMMIT0 关闭 / 1 开启 - SQL错误处理方式
属性
值PDO::ATTR_ERRMODEPDO::ERRMODE_SILENT 无提示(默认) PDO::ERRMODE_WARNING 报错WARNING PDO::ERRMODE_EXCEPTION 抛出异常 - 返回结果集的形式
属性
值PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_ASSOC 关联 PDO::FETCH_NUM 索引 PDO::FETCH_OBJ 对象 PDO::FETCH_BOTH 混合
- 是否自动提交
- PDO的增删改查
exec() 返回受影响行数 用于增删改
query() 返回PDOStatement的实例 用于查询
处理查询结果集fetch() 单条数据/一维数组 fetchAll() 所有数据/二维数组 使用foreach遍历PDOStatement对象 - PDO对象
setAttribute() 设置连接属性
getAttribute() 获取连接属性
exec() 返回受影响行数
query() 返回查询结果集对象
lastInsertId() 返回自增ID - PDOStatement对象
fetch() 单条数据
fetchAll() 所有数据
rowCount() 受影响行数 - 预处理
- 预处理的优点
- 对用户的数据 进行过滤 提高安全性
- 提高批量操作的性能
- SQL的占位符
- ?
- :
- 绑定参数
- bindValue()
- bindParam()
- execute()
- 结果集的预处理
- bindColumn()
- 预处理的优点
1 | - 事务操作 |
====================================
命名空间 (php 5.3 +)
命名空间概述
定义命名空间
语法
namespace 命名空间名称;
特点
1. namespace 需要 php 5.3 +
2. namespace 前面不允许有任何的代码(除了namespace自己)
它的作用范围 到下一个命名空间开始 或 脚本结束 为止
3. namespace 只对本脚本起作用
4. 文件里如果没有定义命名空间,则默认在全局空间之中
定义子命名空间
namespace a\b\c\d…
在同一个文件中 定义多个命名空间
- 不推荐 一般一个文件中只有一个命名空间
- 万不得已 建议使用 {} 将对应的代码包裹
使用命名空间:基础
非限定名称
直接使用函数/类/常量,没有命名空间成分
限定名称
有命名空间成分,但是不以反斜线开头的. (类似于相对路径)
完全限定名称
以反斜线开头,又有命名空间成分. (类似于绝对路径)
命名空间 和 动态语言特征
如果把 函数名/类名/常量名 赋值给变量使用
在命名空间里必须使用完全限定名称
PS. 注意完全限定名称时,必须使用单引号.namespace 关键字 和 NAMESPACE 常量
- namespace 关键字
- 定义命名空间
- 用来简化调用
- NAMESPACE 常量
- 获取本命名空间的名字
::class
自 PHP 5.5 起,关键词 class 也可用于类名的解析。 使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。 这对使用了 命名空间 的类尤其有用。- namespace 关键字
使用命名空间:别名/导入
别名use 命名空间 [as 别名];导入
use 命名空间\类名 [as 别名]; 只能导入类 不能导入函数全局空间
namespace {}
使用命名空间:后备全局函数/常量
命名空间的实用
==============================================
Trait (php 5.4 +)
Trait的概述
Trait 是 PHP5.4 中的新特性,是 PHP 多重继承的一种解决方案。
例如,需要同时继承两个类或抽象类,
这将会是件很麻烦的事情,Trait 就是为了解决这个问题。Trait的简单使用
格式:trait 名字 { 属性 + 方法}特点:
1. 不能有常量 2. 不能被实例化的 3. 在类中 使用use关键字 来混入trait多个Trait的引用
use A,B;
Trait之间的嵌套
一个trait可以由多个trait组成
可以在trait中 使用use …Trait的属性
在trait中 可以定义属性并且可以使用
但是在使用了use 的类中,不允许重复定义与trait同名的属性Trait的方法优先级
class 中 如果有和trait重名的方法 则class附带trait
继承时,trait方法会覆盖class的同名方法Trait的修饰符
static静态的属性只能静态读取,静态的方法可以 动/静 态调用abstract
如果在trait中有抽象方法 则 在use的类中必须实现才可使用Trait冲突
- 代替
insteadof 指定替代的方法 - 起别名
使用 as 给方法起别名
- 代替
模版引擎
什么是模板引擎
1.1 定义
模板引擎实现 前后端的分离1.2 优势
分工明确 程序灵活性 代码可读性 提高开发效率1.3 问题
会降低执行效率1.4 模板引擎分类
编译型 解释型 置换型选择 smarty 模板引擎
2.1 为什么选择smarty
1). 编译型 速度较快 2). php 官方推荐2.2 smarty 优势
1). 开源 2). 插件机制 3). 模板继承 4). 缓存控制安装smarty及初始化配置
3.1 获取smarty
http://www.smarty.net/3.2 搭建smarty入口文件
1). 导入smarty 2). 实例化smarty 3). 初始化 配置 配置 模板文件 目录 配置 编译文件 目录 配置 配置文件 目录 配置 缓存文件 目录 配置 模板变量的定界符 配置 缓存控制 (开启缓存/缓存时间) 4). 分配变量 assign() 5). 加载模板 display()smarty的基本应用
4.1 程序员(PHP)
1). smarty初始化配置 2). 运算操作: 数据库 文件, 数据计算... 3). 缓存控制, 插件扩展...4.2 美工(模版)
1). 把模板变量放在指定的位置 2(). 其他操作: 遍历数据、 模板函数...smarty设计的基本语法
5.1 注释
`{**}`5.2 模板中路径问题
模版文件中所有的相对路径 都相对于 PHP定位 link/script/img/a5.3 模板中读取变量
输出规则 同 echo 一致5.4 在模板中定义变量
{assign var="" value=""} {assign "param" "value"} {$param = value}5.5 忽略解析
{literal}{/literal}smarty模板中的变量应用
6.1 在模板中遍历 数组
{foreach}{/foreach} {section}{/section}6.2 模板中读取内置变量(保留变量)
1
2
3
4
5
6
7
8
9
10
11
12
13{smarty.post} POST
{smarty.get} GET
{smarty.request} 请求数据
{smarty.session} SESSION
{smarty.cookies} COOKIE
{smarty.server} 服务器信息
{smarty.const} 常量
{smarty.version} Smarty版本
{smarty.template} 模板文件
{smarty.current_dir} 模板文件目录
{smarty.now} 当前时间
{smarty.ldelim} 左定界符
{$smarty.rdelim} 右定界符缓存控制
7.1 缓存的配置
caching 是否开启缓存 cache_lifetime 缓存时间 cache_dir 缓存目录7.2 默认 一个模板 对应一个缓存
7.3 一个模板 产生 多个缓存
display(url, 缓存号);
1 | 7.4 为缓存 减少开销 |
模板继承
{extends file=””}
{block name=””}{/block}内置函数
9.1 内置函数{include} {config_load} {extends}9.2 内置块状函数
{foreach}{/foreach} {if}{/if} {block}{/block}
smarty模板引擎
版本不同,对于PHP的支持也不相同 , 推荐使用3.1.10版本
新建工作目录:
1 | /emplates/i.html |
配置.htaccess文件,闲置用户直接访问模板引擎
1 | deny from all |
创建基础配置文件init.php
1 | // 1). 导入smarty |
创建入口文件index.php
1 | require './init.php'; |
注释:
{* 注释内容 *}
路径问题:
- 加载css或图片路径为当前入口位置(index.php)为基准
- 但在加载的css文件中引用图片路径时, 是以当前css文件为基准的
输出类型
模板中所有assign输出都是
echo机制 , true被解析为1 , false被解析为空字符串 , 不能输出数组 和 对象数据
- 对于数组, 可以使用
{var_dump($arr)}的格式输出 , 也可以使用{$arr[2]}或{$arr.2}读取 - 对于obj对象 , 首先需要
$smarty->assign('obj',new User());, 然后在html模板中使用<p>{$obj->name}</p>或<p>{$obj->demo()}</p>调用