PHP编程实战

一、面向对象

A.类

1.类是简单的用户定义类型。在面向对象的语言中,类就是创建类的对象或实例(功能副本)的模板;类描述了其所属的任何对象的共同特点;类的目的是封装对象的定义和行为,对最终用户隐藏它的具体实现,并使最每次用户按照文档说明和期望的方式来使用类对象。

2.类是自足的,它就像一个可以控制入口的高速公路—有受限的入口和出口坡道。

B.继承和重载

1.方法定义为final就不能被重载

2.使用__autoload可以自动加载类文件,类文件中不要?>结尾

C.各种“魔术方法”

1.__set,赋值给不存在的成员时调用,__get调用不存在的成员时调用,__isset检验一个不存在的属性是否设置或是否有值,__unset在一个不存在的属性上调用unset时调用,empty会调用__isset;

2.__call调用不存在的方法时,此函数被调用

D.复制、克隆和比较对象

1.普通=是浅复制,深复制使用clone

2.比较:同一类对象所有成员是相等的,使用==;对象是同一类相同对象的引用,使用===;

E.接口、迭代器和抽象类

1.实现接口Iterator的任何类都可以在for循环中使用,它们的对象被称为迭代器,迭代器是可以像数组一样表现的对象

2.接口和抽象类:两者均被

F.类的作用域与静态成员

1.在类作用域内声明的静态对象与其可见性无关。self就是“这个类”的缩写,不会通过继承传递。

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/1.php

二、异常和引用

异常是同步事件。“同步”的意思是指代码本身对事件做出瓜,而不是像信号一样,对外部事件做出反应。

A.异常

1.异常可以是Exception类的对象,也可以是任何扩展了Exception类的对象。

2.set_exception_handler建立倒休捕获异常的处理程序

3.除非try块也被嵌套,否则PHP不会支持嵌套异常

B.引用

1.PHP中引用不是指针,与Perl不同,PHP没有引用类型,不能利用引用对象的方式来存储对象的地址。“引用”仅是指一个对象的另外一种称呼。

2.PHP实际上是通过复制对象传递参数的,对于非对象类型(如数字、字符串或数组)来说,创建了一个完全相同的对象实例。对于对象类型来说,却只创建了引用或对象的另一个名称。通过操纵新的变量,我们就可以操纵原来对象的内容,因为新的变量仅是现有对象的另一个名称。

3.引用可以绕过private或protected提供的可见性保护

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/2.php

三、PHP在移动设备上的应用

A.检测设备

1.$_SERVER[‘HTTP_USER_AGENT’],可能带有欺骗性

2.browscap.ini

B.侦测移动性能

1.WURFL系统

2.Tera-WURFL:使用数据库而不是很大的XML

C.渲染工具

1.WALL

2.图像调整:ImageAdapter

3.响应性CSS:@media相关属性

D.模拟器和SDK

直接去找手机模拟器下载

E.QR码

TCPDF、PHPQRCODE、Google Chart API

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/3.php

四、PHP在社交媒体中的应用

A.OAuth

认证步骤:

①OAuth应用向服务提供商发送消费令牌,替换掉请求令牌

②提示用户权限并授权

③使用回调URL或者个人标识号(PIN)来验证授权的请求

④交换请求令牌和PIN(或者回调)来获取访问令牌

⑤用户通过访问令牌来使用应用

B.Twitter和Facebook,翻墙啊,心累

五、前沿

A.命名空间

1.命名空间是一系列语法对象,可包含类、函数或者常量。它们按等级排序并可能包含子命名空间。用于解决变量名称冲突,PHP5.3引入。

B. 匿名函数(闭包)

在PHP中,闭包主要用来创建简短的回调函数,以及防止不必要的全局名称带来的浪费。

C.Nowdoc

1.Nowdoc插入SQL、PHP代码和动态可执行变得非常容易。需要在脚本中插入代码作为字符串时,Nowdoc仅仅是作为辅助。

D.局部goto语句

1.不能跳出例程或者进入循环

E.标准PHP库

1.标准PHP库(SPL)是一套类,对于标准程序结构,比如栈、堆、双端链表和优先级队列极为有用。

2.SplMaxHeap、SplFileInfo、FilesystemIterator、Globiterator

3.PHP5.3开始成为PHP的组成部分,不能禁用或卸载,是一个相当大并且在发展的扩展。

F.Phar扩展

1.php.ini中phar.readonly必须为Off

2.phar pack -f xxxx.phar -c gz xxx.php xxx.php

3.phar sign -f xxxx.phar -h sha1签名防止修改

4.phar list -f xxxx.phar查看内容

5.phar delete -f xxxx.phar -e xxx.php 删除一个php文件

6.phar add -f xxxx.phar xxx.php添加一个php文件

7.phar命令支持正则

8.phar stub-set -f xxxx.phar -s stub.php 创建可执行脚本,脚本结束必须有__HALT_COMPILER();

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/4.php

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/4-1.php

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/wild.php

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/domestic.php

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/stub.php

六、表单设计与管理

A.数据验证

1.filter_var函数

2.PCRE库

B.上传文件/图片

1.is_uploaded_file

C.图像转换和缩略图

1.imagecreatetruecolor创建缩略图,imagecopyresampled创建图像副本,imagedestroy销毁资源

D.正则表达式

1.JS中:String.match;String.search();String.replace();String.split();Regexp.compile();Regexp.exec();Regexp.test();

2.PHP中:preg_grep();preg_match_all();preg_match();preg_replace_callback();preg_replace();preg_split();

E.多语言集成

1.HTML中:<meta http-equiv=“Content-Type” content=“text/html;charset=UTF-8”/>

2.MySQL:set names utf8

3.PHP:utf8_encode();mb_convert_encoding();mb函数;iconv()

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/5.php

七、数据库集成Ⅰ

1.创建NoSQL数据库有两个目的:原始性能和可扩展性;低管理开销;

2.通常在单个集合里搜索非常快,只不过没有连接。map-reduce算法有效划分了数据库,使其分别在多台不同机器上工作。

3.ACID要求:

  • 事务作为整体进行操作,要么全部成功,要么全部失败,如果一个事务失败,数据库的状态就像是该事务从未发生过一样(原子性);
  • 在事务之前,每个事务只能看到所提交和数据(一致性);
  • 在改变提交之前,用户看不到彼此的改变(隔离性);
  • 一旦提交,这种改变将是永久性的(持久性);

A.MongoDB

1.如果没有一个safe参数用以插入调用,唯一索引不会报错,可能造成性能损失。

2.运算符包括$gt,$lt,$lte,$gte,$ne,$in,$nin,$extists

3.使用正则表达式查询:MongoRegex

4.$where语法使用js语法

B.SQLite

1.支持的数据类型:NULL、整数、实数、文本、二进制大型对象

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/7.php

八、数据库集成Ⅱ

A.PDO

1.PDO两个层次:有一个能用的PDO接口;特定数据库的驱动程序;

B.Sphinx

九、数据库集成Ⅲ

Oracle

十、函数库

SimplePie(订阅RSS)、TCPDF(PDF生成)、phpQuery(HTML DOM)、PHPMailer(php发送邮件)、gChartPHP(Google图表API包)

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/10.php

十一、安全

A.永不信任数据

1.register_globals:初始化变量,确保register_globals不能覆盖已有的变量

2.对于include和require调用中的变量,应该使用可接受文件名的白名单或者净化文件名,尽量不要使用$_GET之类的来获取加载

3.表单数据应该使用https

4.不要信任cookie、session和server

5.ajax的标头可能被伪造

B.常见的攻击

1.同源策略:是浏览器针对客户端的脚本实施的一项安全措施。使脚本只能够访问在同一协议、主机和端口上的函数以及元素。一些攻击的发生是因为利用用户或者网站而不合理地绕开了同源策略。

2.跨站脚本攻击(XSS):将JS脚本注入到网页中,利用cookie等向目标服务器发送数据。必须转义htmlspecialchars或filter_var来处理输入的值

3.跨站请求伪造(CSRF):利用伪造的HTTP请求。预防技巧是生成传话ID时,产生并存储一个秘密的会话标记,在提交时进行匹配并确保一定的时间内有效。

C.会话

1.使用XSS将SID写一篇用户的cookie中。必须在每个脚本开始重新生成会话并在php.ini中设置指令,在PHP中可以使用新的值替换传话ID,但保留当前传话的数据。也可以保存一些$_SERVER信息的值进行比对,最后就是加密服务器端的会话数据。

D.预防SQL注入

尽量使用PDO占位符,msqy_sql_real_escape_string函数以及addslashes函数

F.过滤器扩展

使用filter_var函数

G.php.ini和服务器设置

1.生产环境不要显示phpinfo(),合理的目录读写权限,.htaccess和robots.txt可能暴露第三数据

2.php.ini中不显示错误,确保日志文件位于文档目录之外,关闭register_globals、magic_quotes_gpc,注意disable_classes中的高风险PHP函数,open_basedir限制php能打开文件的目录

H.密码算法

1.掺杂包含为散列结果追加字符串然后重新散列联结后的结果。(salt)

十二、使用Zend Studio for Eclipse、Bugzilla、Mylyn和Subversion进行敏捷开发

十三、重构、单元测试和持续集成

A.重构

  • 创建新的函数,随后转而调用这个函数,从而减少重复的代码
  • 用简化的语句或描述性的函数名替代复杂的逻辑表达式,提高代码的可读性
  • 从大型类中提取出一些方法,并将这些方法自杀身亡到新的或更为合适的类中
  • 养活控制结构(if/else、for、foreach、while、switch)的层次嵌套
  • 面向对象的设计变更

B.单元测试

1.最好让一个类代表一个对象,一个函数只做一件事

2.即使代码覆盖率达到100%,程序仍可能运行失败,因为程序是一个整体,要测试整个程序需要进行功能性测试

3.单元测试有助于提醒程序内发生的变化,已知变化或一些重构带来的副作用。单元测试和功能性测试都属于回归测试,确保一个功能优化处理、BUG修正或配置变更后,没有引入新的错误或者倒退。

4.测试驱动开发的基本原则:编写一个测试;由于尚未编写出可以满足测试的代码,测试失败;实现最少的功能,使测试通过;重复上面的步骤;

C.持续集成(CI)

1.一个包含多步骤的任务示例:从受控的源代码库要付出当前版本的代码;从网站上抓取第三方库的最新版本;对程序做表态分析;在程序中,对PHP代码进行单元测试;

2.假设发布一个新版本,基于单元测试成功,可以设置额外的构建步骤:

  • 混淆PHP
  • 创建一个WAR文件(组件)
  • 轮询版本管理系统以求得版本号
  • 从数据库或文件中读取有效的发行版本
  • 在现行的版本与以前的发行版本之间,创建一个补丁程序
  • 将构建标记为一个发行版本
  • 在发行版本数据库内插入一个新记录,或更新有效的发行版本文件
  • 将WAR文件部署到一个公开访问的服务器

3.Jenkins和phpUnderControl

4.CI服务器使用以下工具:版本控制;单元测试和代码覆盖;静态分析;自动构建;

5.静态分析:检测代码包括计算复杂度、依赖性、最佳实践建议、编程规范的符合度、找出问题的代码或者可能的缺陷;显示重复的代码;产生文档;相关工具:PhpCheckstyle、PHPCodeSniffer(编程规范的符合);PHPDocumentor(API生成);PHPLinesofCode、pdepend(代码质量的度量);PHP Copy/Paste Detector、phpmdPHPmessdetector、phantrn、padawan(代码质量建议);phpcb(代码加亮);PHPSecurityAuditTool(安全)

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/walk.php

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/walkTest.php

十四、XML

https://github.com/zhangyue0503/php/blob/master/phpbianchengshizhan/14.php

十五、JSON和Ajax

十六、结束语

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2017-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券