Heim >Backend-Entwicklung >PHP-Tutorial >[PHP]PHP技术基础

[PHP]PHP技术基础

WBOY
WBOYOriginal
2016-06-23 14:35:43930Durchsuche

缘起

我使用PHP语言已经有很多年了。在过去的几年中,虽然并不曾用PHP开发什么大项目,但一直都在用PHP做一些小东东,并关注PHP的发展。为什么PHP语言如此让我关注呢?原因有两个:

PHP是一个开源语言,其语言与库都是开源的。而且其有成熟的开源社区,这对于技术开发者而言是极大的支撑; PHP是一个完全面向Web开发的语言。PHP对于Web开发的专注,使得这个语言在Web开发上具有其它语言所不能比拟的一些优势。比如PHP既能编写羽量级的Web网站,也能支撑超负载大规模的Web应用。PHP在Web上有许多清晰而简洁的解决方案,这是许多通用语言所不能比的。比如我所喜欢的另一个开源语言Python,其也能用于开发Web应用。但Python的目标显然不限于Web开发,因此在Web开发方面Python的生产力并不比PHP强。

虽然上述都是一些个人观点,但从实际应用上看,在Web应用中,PHP显然是最流行的语言。许多知名网站都建筑在PHP上。

前几年我所经历的Web开发,仍集中与.Net平台上。所以对于PHP,仅仅作为个人珍爱,并没有多少实际项目应用。但从今年开始,随着软件开源趋势的发展,在Web端采用PHP的项目也多了起来。我的几个朋友都在进行PHP项目的开发,这在几年前是难于见到的。我是很高兴看到这一变化的。开源的发展势必深刻影响软件业的发展,这样更多更丰富的软件资源将被生产出来,我们将面对不再是“Wintel”世界,这很好......

因此我将这些年的一些PHP技术笔记整理出来,作为一个界石放在自我Web开发之路上。在该石之前是点滴零碎的PHP爱好者,在此石之后我将更深入地探索PHP技术,在PHP世界中深耕细作。

PHP基础语法印象

PHP是一个应用型的语言。它从多个语言中获取灵感,包含许多语言特质。因此对于熟悉 C、C++、Java等语言的人来说,PHP语言很好学。而且其采用了一种最直接的嵌入方式?? 。这种嵌入方式最大程度地保留其与HTML和XHTML的接触度,从工程角度上看是极其经济的。正因如此,当年PHP出现后,MS即可将这种方式引入IIS中,开发出ASP语言。

当然直接嵌入的方式也存在许多问题,其最主要的是无法做大。小打小闹的HomePage可以,但多人团队操作的Web应用程序则很困难。PHP从C/C++中借鉴了 include 方式,基于include、require、require_once等关键词来进行多文档关联。而在PHP4/5中,更强调前后台之间的分离,采用MVC设计模式来构建Web程序。经过多年的发展,PHP语言已经可以胜任大型Web程序的开发。

我认为PHP语言的核心,应该是:

库和框架: 引用在C/C++中的经验,库学习是PHP中的核心。PHP中有两类库??核心库(Core)和拓展库(Extend)。核心库中对于字符串操作、数组操作、日期操作与正则表达式操作应该由其用心,这些库很多是基于Web UI的,而Web程序的输入输出是很关键的技术,其涉及许多安全与稳定方面的问题,也涉及用户体验等问题。而拓展库是方便开发的。PHP具有丰富的拓展库资源,不论是PECL拓展还是PEAR拓展,或是sf.net上的众多PHP程序模块,都是可以挖掘借鉴的财富。而一些成熟的库或程序,已经成为一种稳定的框架,如Smarty和Drupal。利用这些框架,可以极大提升项目开发速度与质量;阅读这些框架,可以极大提升自我PHP方面的功力。在库与框架上花费时间与精力是最值得的。 OOP开发与设计模式:虽然直到PHP5才支持OOP设计,但在PHP4中可以采用"回调函数(callback function)"等来模拟类的动力学模型。而现在OOP开发已经成为基础技术,不论是多人的大型项目程序,还是单人的小程序,都应当采用OOP的方式进行。PHP最简单的回调函数就是一个函数变量,样例如下。
   
PHP技术快速一览

我将这几年积累的PHP技术进行一些分类整理,其主要有:

字符串库:在Java、.Net中都有类似的字符串处理函数库,需要注意的是Unicode字符处理库 mbstring 拓展库; 数组处理:与C/C++所不同的是,PHP数组处理技术非常的复杂,其与页面效率密切相关。比如要用shuffle()或array_rand()来随机抽取元素;尽量用foreach而不是用for来遍历数组。更重要的是,PHP数组承担了配置对象与存储对象的作用,在许多库或框架的使用前,都要设置一个配置数组来进行自定义配置; 日期与时间:需要注意其适用场所,并不一定要详细其在毫秒级别上的数据,其效率很可能与服务器和网络环境有关。因此对于PHP程序测试,应该采用客户端的Javascript来进行计时,其与PHP服务器端的计时相对照会更有用; 正则表达式与服务器变量:在PHP中,正则表达式与服务器变量是用来防止攻击,对HTTP访问进行过滤与校验的最基本工具。我的做法是在开发前,开发一个基于正则表达式与服务器变量的myFilter类,该类用于过滤信息,实现最基本的防护作用; 数据库:要深入学习数据抽象层技术,对于 metabase/PEAR:DB/PDO和ADODB等抽象层库有充分的了解。这样数据库程序才能有良好地移植能力。我选用ADODB,主要原因是其与.Net架构有相似性,并且能支持Python。 会话管理:在Web2环境下,Cookie的管理比Session更重要。对于PHP项目中的核心业务步骤,不采用Ajax方式,用Session进行管理;对于其它非核心的业务(主要是查询),可以采用Cookie方式,将部分Javascript程序下发到Cookie中,非常有利于提升客户体验。 国际化与本地化:PHP项目中应坚持用Utf-8编码(页面与数据),而且在编写程序UI时,应采用 gettext 扩展库进行多语言支持。我的做法是基于Drupal框架进行PHP开发,充分利用Drupal提供的t函数方式进行国际化与本地化。 缓存与加密:PHP有很好的缓存技术与加密技术,相关的库有ob_库、MD5、SHA1、Cracklib拓展库与mycrypt拓展库。利用缓存与加密技术,可以有效提升系统性能,特别在进行核心数据处理方面。而对于用户体验方面,我的侧重点在于采用Ajax技术与Xml相结合方式; 其它技术:PHP的Shell技术可以实现部分系统业务的自动化;而利用Curl库可以制作一些自动爬虫程序,用来进行单元测试与数据挖掘工作;PHP对于图像处理有很好的技术方案,GD2、Ming与ImageMagick都是很好的选择。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn