《Modern PHP》 - 笔记1 - 最佳实践

分类: 编程 标签: php

过滤、验证和转义数据

过滤数据

HTML

SQL queries

User profile

验证数据

转义输出

密码

时间和日期

不建议自己手动处理时间和日期,因为里面有太多要考虑的东西:时间格式,时区,夏令时,闰年,闰秒,以及不同天数的月份。

而是,应当使用 DateTime, DateInterval, DateTimeZone 类来处理时间

设置默认时区

  1. php.ini 中设置 date.timezone = 'PRC'
  2. date_default_timezone_set('PRC')

DateTime类

  1. new DateTime('2014-04-27 5:03 AM'), 传入一个PHP能够理解的时间字符串
  2. DateTime::createFromFormat('Y-m-d H:i:s', '2019-04-02 18:08:00'),从指定的时间格式创建时间

DateInterval

  1. DateInterval 表示一段长度的时间,在 DateTime 类的 add() 或 sub() 方法中,可以传入一个人 DateInterval 实例,来修改时间
  2. new DateInterval('P2W2DT5H'),实例化需要传入一个字符串,这个字符串第一个字符是"P",第二个字符表示数量,第三个字符表示单位,合法的单位有:Y(年),M(月),D(天),W(周),H(小时),M(分钟),S(秒)。日期和时间之间使用“T”分隔。比如 “P2W2DT5H” 表示 2周2天5小时

DateTimeZone

  1. 表示时区,new DateTimeZone('PRC')
  2. 用途:作为 new DateTime() 的第二个参数。如果不指定,则使用默认的时区设置(上面提到)
  3. setTimezone() 可以用来修改 DateTime() 的时区
  4. 在数据库和代码中使用UTC来处理时间很方便,只有当显示给用户看时,再转换为对应的时区。

DatePeriod

  1. 用于遍历时间(以给定的间隔),用途:日历中重复的事件
  2. new DatePeriod(\(datetime, \)dateinterval, $number)
  3. DatePeriod 是一个迭代器,每次迭代输出一个 DateTime 对象

数据库

使用PDO来连接数据库,针对不同的底层数据库,提供了统一的访问方式。但缺点在于不同的数据库有自己的方言,这是PDO所不能支持的。建议是写标准的SQL。

数据库连接和DSN

预处理语句

查询结果

事务

多字节字符串

字符编码

输出UTF-8数据

流包装器

流上下文

流过滤器

创建自定义流过滤器

错误和异常