1140 #编程# PHP程序员必知手册-《PHP之道》

《php之道》中文版,阅读地址:http://wulijun.github.io/php-the-right-way/#code_style_guide

《php the right way》英文版(建议直接阅读英文版,中文版17年后没再更新),阅读地址:https://phptherightway.com/

某天在搜藏夹里翻到这个地址,也想不起是什么时候搜藏起来的了。
对于现在的我欠缺的基础很是有用,零零碎碎花了大概有3填时间把这篇文字看了个大概,的确当的起php之道的名字。
这本书对于php相关的东西基本上大都讲到了,许多平时不曾注意的细节也有了一些描述,但毕竟不能算成书,很多细节点并没有展开讲,对于较为系统的了解php的知识还是一个不错的提纲,以此自己展开应当是个不错的选择,稍后我会整理一份简单些的php学习提纲附在下面。

php 纲要

tips

php -S localhost:8000

这个可能很多人都不知道,很好用的说

代码风格

psr0 psr1 psr2 psr3 psr4 都需要时常温习
E文:http://www.php-fig.org/psr/
中文:https://github.com/hfcorriez/fig-standards/tree/zh_CN/%E6%8E%A5%E5%8F%97

语言亮点

oop
不错的中文教程:http://blog.snsgou.com/post-41.html

函数式编程
此区块暂不明朗,还木有找到合适的教程,后面填坑

魔术方法
官方:http://www.php.net/manual/zh/language.oop5.magic.php 足够了

命名空间
这个我直接黏php之道的

PHP社区的众多开发者已经开发了大量的代码。这意味着一个函数库中的PHP代码可能使用了另外一个库中相同的类名,如果它们共享一个命名空间,则会产生冲突导致异常。
命名空间解决了这个问题。如PHP手册里描述的那样,命名空间类似于操作系统中的目录,两个同名文件可以共存于不同的目录。同理,同名的PHP类可以在不同的PHP命名空间下共存,就这么简单。
因而把代码放在自己的命名空间下就显得非常必要,这样其他人就可以放心的使用这些代码,而无需担心与其他函数库的命名冲突。
[PSR-0] 里提供了命名空间的推荐使用方式, 它试图提供一个标准的文件、类和命名空间的使用惯例,从而让代码做到即插即用。
2013年12月,PHP-FIG发布了新的自动加载标准:[PSR-4],将来可能会替换旧的PSR-0标准。PSR-4要求PHP5.3版本以上,而目前很多项目用的都是PHP5.2, 因此当前两个标准都可用,但是对于新应用或者包的话,应优先考虑PSR-4.
psr0和psr4的介绍见 代码风格 中的链接

命令行

php -i

这是查看php信息的命令,类似phpinfo的作用,配合grep使用可以快速查看你所需要的配置

php -a

php shell 可以这么理解吧

调试

xdebug 配合 ide 是目前开发的主要调试手段,没事耍两下
phpstorm + xdebug 配置教程 http://micate.me/phpstorm-xdebug.note

依赖管理

composer 缺点就是国内网络经常连不上,线上慎重使用

找到composer还有国内的源 https://pkg.phpcomposer.com/

pear 话说,我不了解。。。没事看下,应该会有些帮助

基础知识

这块认真看下,有些发现平时写的实在是。。。

日期和时间

PHP使用DateTime类完成读取、设置、比较和计算日期与时间。虽然PHP中有很多日期和时间处理相关的函数,但是DateTime类提供了 完善的面向对象接口完成各项常见操作,而且还能处理时区,这里不作深入介绍。

设计模式

这块入门书籍 《大话设计模式》,我目前正在阅读中看着不错,很生动,后面最好再去看下《gof》,这个我还没看,完成之后再做更新。

数据库

这里主要是讲mysql,其他的以后用到再整理
关于mysql,暂时木有好的教程,待更新
mysql目前来说主要使用的驱动是pdo,php-mysql这个原生的驱动在5.4以后已经被标记为不推荐使用了
话说网上没有找到比较好的教程,下面这个暂且用用,有好的换掉
http://www.phpv.net/html/1579.html

异常

异常是大部分流行语言的标准特性,但是PHP开发者却不太重视。其他语言如 Ruby极度倚赖异常,在任何错误发生的时候,如HTTP请求失败 、DB查询错误,甚至图片资源未找到,都会抛出一个异常,以及时提示那里发生了一个错误。
PHP则对此很宽松,如调用file_get_contents()失败,只是返回FALSE并提示一个warning信息而已。很多老的PHP框架,如 CodeIgniter会返回false,然后在自己的日志里记录一个消息,开发者需要使用如$this->upload->get_error()的方式来查看发生了什么 错误。这么做需要你自己检查是否有错误,并需要根据不同类调用不同的方法来获取错误消息,而不能让错误明显的显示出来。

目前大部分的框架都会有一些自己的异常处理方式,使用的时候应该先把框架的这个机制给搞明白。

安全

web的安全问题通常是相当重要的,较为常见的有:sql注入、xss攻击等等,下面是较为全面的列表
http://os.51cto.com/art/201204/328938.htm

测试
测试驱动开发

测试驱动开发(TDD)是以非常短的开发周期,不断进行迭代的软件开发流程:首先开发者针对改进或新功能编写失败的自动化测试用例,然后编写代码使测试用例通过, 最后重构代码,让代码满足可接受的标准。Kent Beck,该技术的创建者或者说重新发现者,在2003年声明TDD鼓励简单的设计和提振信心。

单元测试

单元测试是从编写开始,贯穿于整个开发周期的一种用于保证函数、类和方法的行为与预期一致的编程方法。通过检查各个函数和方法的输入和输出值,你可以保证它们 内部逻辑已经正确执行;通过依赖注入、编写mock类和stubs,你可以验证依赖是否已经正确处理,提高测试覆盖率。

[PHPUnit]是PHP应用的单元测试框架的业界标准,其他几个可选框架是:

  • [atoum]
  • [Enhance PHP]
  • [PUnit]
  • [SimpleTest]
    行为驱动开发

行为驱动开发(BDD)有两种方式:SpecBDD和StoryBDD。SpecBDD关注代码的技术行为,而StoryBDD关注业务、特性和交互,这两种方式都有对应的PHP框架。

框架

大量的PHP开发者使用框架,而不是重复发明轮子来创建自己的Web应用。框架抽象出底层通用的业务逻辑,给使用者了提供简单易用的接口。