@lgh-dev
2017-12-06T03:53:25.000000Z
字数 4557
阅读 639
PHP
- PHP-FIG PSR推荐规范:
- PSR-1:基本代码风格
1、必须把php代码放在 or 标签中
2、所有的PHP文件必须使用UTF-8字符集编码,而且不能有字节顺序标记(Byte Order Mark, BOM).
3、一个PHP文件尽量只做一件事,要不定义符号,要不执行操作,尽量不要都做。
4、自动加载遵守PSR-4规范。
5、类名使用CamelCase驼峰式。
6、常量使用全部大写,中间可以使用下划线分开单词。
7、方法或变量名称使用camelCase小驼峰式,首字母小写- PSR-2:严格的代码风格
1、PHP代码使用四个空格进行缩进,空格比较可靠,在不同的编辑器中效果一致,制表符就不一定了。
2、PHP文件使用UNIX风格换行符(LF),最后要有一个空行,不能使用php的关闭标签?>,每行代码不能超过80个字符,至少不能超过120个字符。每行末尾不能有空格。
3、php关键字应该使用小写字母,true,false,null.....
4、每个命名空间声明语句后面跟个空行。
5、类定义体的起始括号必须在定义在定义体之后新起一行,结束括号必须在定义体之后新起一行。
6、方法定义体起始括号要在方法名之后另起一行,结束括号要在方法定义体之后另起一行,每个参数(except last one)后面有一个逗号和空格。
7、类中的每个属性和方法都要声明可见性,public,protected,private。
8、所有的控制结构后面都要有一个空格。如if elseif,switch,case, while,do while,for,foreach,try,catch....., 控制结构关键词后面的起始括号和控制结构关键词写在同一行。- PSR-3:日志记录器接口
- PSR-4:自动加载器
1、自动加载器测略是指在运行时按需查找PHP类,接口和性状,并将其载入PHP解释器。
2、PSR-4自动加载器策略依赖PHP命名空间和文件系统目录接口查找并加载PHP的类,接口和性状。
- php组件的文件组织方式
1、src/ 这个目录包含组件的源码(比如PHP的类文件)
2、tests/ 这个目录是组件的测试。
3、composer.json 这个是Composer配置文件。这个文件用于描述组件,还会告诉Composer的自动加载器,把组件中符合PSR-4规范的命名空间对应到src/目录。
4、README.md 这个Markdown文件提供关于组件的有用信息,包括组件的名称、说明、作者、用法、贡献者指导方针、软件许可证和要感谢的人
1、过滤输入,验证数据,转义输出
2、Html Purifier 库,使用指定的规则过滤HTML输入,缺点是速度慢,配置困难。
3、PDO是PHP内置的数据库抽象层,使用一个接口表示多种数据库。PDO预处理语句是PDO提供的一个工具,用于过滤外部数据,然后把过滤后的书库嵌入sql查询。
4、加密是双向算法,加密的数据可以解密;而哈希是单向算法,哈希后的数据不能在还原成原始值,而且相同的数据得到的哈希值始终相同。
5、最安全的哈希算法是bcrypt,它故意设计的很慢,会自动加盐,防止潜在的彩虹表的攻击。
6、DateTime类提供了一个面向对象的接口,用于管理日期和时间。一个DateTime实例表示一个具体的日期和时间。
7、DateInterval 实例表示长度固定的时间段(例如"两天"),或者相对而言的时间段(例如"昨天"),DateInterval实例用于修改DateTime实例。
8、如果经常需要处理日期,应该使用nesbot/carbon组件。yi a
1、PDO是一系列PHP类,抽象了不同数据库的具体实现,只通过一个用户界面就能于多种不同的数据库通信,但是我们仍然必须自己编写sql语句
。PDO的构造方法有一个字符串参数,用于指定DSN(Dsta Source Name,数据源名称),提供数据库链接的详细信息。
2、DSN开头是数据库驱动器的名称,后面跟着:符号,然后就是如下信息:mysql:host=hostname;dbname=database;port=3306;charset=utf8..
3、PDO中fetch()函数的参数,
- PDO::FETCH_ASSOC 让fetch和fetchAll返回一个关联数组,key值是数据库的列名。
- PDO::FETCH_NUM 返回一个健值为数字的数组,key是数据库列所在的索引。
- PDO::FETCH_BOTH 返回一个既有关联数组,又有数字数组的数组。
- PDO::FETCH_OBJ 返回一个对象。
4、事务是指把一系列数据库语句当成单个逻辑单元执行。这一系列语句要不都执行,要不都不执行。保持数据的一致性,安全性,持久性。
pdo http://php.net/manual/zh/pdo.setattribute.php 设置pdo的属性。
1、多字节字符是指不再传统的128个ACSII字符集中的字符。PHP中处理字符串的函数默认假设所有字符串都是8个比特位。
2、使用mbstring扩展提供的多字节字符函数替代PHP默认的原生函数,尤其是处理Unicode字符串时,否则很容易损坏多字节的Unicode数据。
3、字符编码是打包Unicode数据的方式,以便把数据存储在内存中,或者通过线缆在服务器和客户端之间传输。
4、处理多字节字符串,一定要知道数据的字符编码,使用UTF-8字符编码存储数据,使用UTF-8字符编码输出数据。
5、mbstring 扩展不仅能处理Unicode字符串,还能在不同的字符编码之间转换多字节字符串。
1、流的作用是使用统一的方式处理文件,网络和数据压缩等共用同一套函数和用法的操作。是具有流式行为的资源对象。因此,流可以线性读写,或许还能使用fseek()函数定位到流中的任何位置。-php手册
2、流的作用是在出发地和目的地之间传输数据。出发地目的地可以是文件、命令行进程、网络链接、zip或tar压缩文件、临时内存、标准输入输出、或者php流封装协议实现的任何其他任何资源。
3、流式数据的种类各异,每种类型都需要独特的协议,以便读写数据,我们称这些为流封装协议。他们都包含如下过程: 开始通信,读取数据,写入数据,结束通信。
4、普通的ULR其实是PHP流封装协议标识符的伪装。php默认的使用的流封装协议是file://。
5、php://流封装协议:这个流封装协议的作用是与标准输入,标准输出和标准错误文件描述符通信.
PHP流四个常用流:
- php://stdin 只读php流,数据来自于标准输入,可以接受命令行传入的脚本信息。
- php://stdout 把数据写入当前的输出缓冲区,只能写,无法读或者寻址。
- php://memory 从系统内存中读取数据,或者把数据写入系统内存,缺点是内存有限。
- php://temp 她的作用和php://memory 类似,不过没有可用内存时,PHP会把数据写入临时文件。
6、php的文件系统函数(fopen,fgets,fputs,feof,flose...)能在所有支持这些函数的流封装协议中使用。
7、有些PHP流能接受一系列可选的参数,这些参数叫流上下文,用于定制流的行为。不同的流封装协议使用的上下文参数有所不同。流上下文使用stream_context_create()函数创建。这个函数返回的上下文对象可以传入大多数文件系统和流函数。
8、PHP流真正的强大之处在于过滤,转换,添加和删除流中传输的数据。要把过滤器附加到现有的流上,需要使用stream_filter_append()函数
#使用流过滤器,获取近30天的日志信息 DatePeriod,DateTime,stream_filter_append
$dateStart = new \DateTime();
$dateInterval = \DateInterval::createFromDateString('-1 day');
$datePeriod = new \DatePeriod($dateStart, $dateInterval, 30);
foreach ($datePeriod as $date) {
$file = 'logs/laravel_info-' . $date->format('Y-m-d') . '.log.bz2';
if (file_exists($file)) {
$handle = fopen($file, 'rb');
stream_filter_append($handle, 'bzip2.decompress');
while (feof($handle) !== true) {
$line = fgets($handle);
if (strpos($line, 'Error') !== false) {
fwrite(STDOUT, $line);
}
}
fclose($handle);
}
}
9、自定义流过滤器,是个PHP的类,扩展内置的php_user_filter类,这个类必须实现filter(),onCreate(),onClose()方法。而且必须使用stream_filter_register()函数注册自定义的流过滤器。流中每个地响都有两个属性,data和datalen 这两个分别是内容和长度。
1、错误出现的时间比异常早,错误会导致程序脚本停止执行,如果可能,错误会委托给全局错误处理程序处理。异常是PHP错误处理系统向面向对象演进后的到的产物,可就地处理,无需停止脚本执行。
2、PHP异常可以在php的任何层级抛出和捕获,异常提供的上下文信息比PHP错误多。可以扩展最顶层的Exception类。异常加上好的日志记录器比PHP错误能解决更多的问题。
3、错误遵守:一定要报告错误,开发环境显示错误,生产环境不显示错误,开发和生产环境都要记录错误。
4、Whoops为PHP错误和异常提供了设计精美的且易于阅读的诊断界面。Monolog日志记录器,SwiftMailer 邮件组件。