当阅读各种和PHP相关的博客、Quora问题、Google+社区、资讯和杂 志的时候,经常会注意到在技术上出现两极分化的现象。问题均围绕在“我如何连接到一个MySQL数据库?”,或者是“我如何使得邮件系统能够每小时发送超 过一百万份电子邮件,在不引入一个新的服务器的前提下?”这样的范围内。

 
    通过分析研究,可以根据对PHP的使用能力将应用者分为四类:初级、中级、专业和精英
 
在极端情况下
    使用PHP语言,初级者会学一些变量、include()包含文件、表单处理。还会学一些逻辑架构,就连发送一份邮件也要借助教程,即使是点击面向对象编程的案例的时候也不一定真正理解它的运行原理。
   
PHP专家每天都会花很多时间将PHP应用于各个项目中,比如商业应用或者各种需要数据库和PHP相结合的应用。此外,这些专家还会参加各种研讨会,学习
设计各种各样的模型,并且很容易就开发出一个完整的项目——从图表设计到最后执行。关键一点是他们早已不再拘泥于程序式的代码编程了。
精英程序员就是传说中经过10000+小时技术磨练的专业PHP人士,他们通过自己编写
扩展来扩充PHP的开发功能,更牛的是,他们只要粗略的浏览一下源文件就能找出bug,对代码布局可以说是相当的细致。他们能够创造出最复杂的项目,在别
人还没发现问题之前,他们就已经找出可替代的完美方案了。除此之外,他们还会写一些比较受欢迎的PHP语言类的书本,参加各式研讨会,创建一个非常成功的
框架也是不在话下的。
关键环节
    一个程序员如何从初级者转变到专业者或者更厉害的角色呢?如果一个人只会基础的编程知识,那基本上是不可能有所提升的,更别说去运用一些更先进的技术方法了。要想成为一个专业的PHP程序员,首先要做的就是成为一个中级PHP程序员。
接下来的这个列表就是初级者需要经历的过程——熟练使用PHP的过程。
 
放弃意大利面式代码
    很多人认为使用类就意味着是在编写面向对象的代码,而使用函数就意味着是在编写过程式代码。其实这是大错特错了,先来假设一下广泛的vanilla定义:过程式代码就是不需要使用类和目标的代码,OOP代码就是尽可能多的使用类和目标的代码。
这里的建议是完全放弃过程式代码,尽可能多的使用面向对象的编码风格——编写类,封装逻辑,考虑真实的术语。建立在类代码基础上的过程式代码的性能优势,在和重实用性的OOP代码相比是微不足道的,适当的OOP代码可以让未来的开发者继承你的项目。
 
仔细分析现有项目
    不管你是在哪里看到的源代码,都要仔细钻研。例如,在Github里查找PHP项目,复制下来,部署在自己的设备上,试着结合自己的代码来运行这一项目。一个文件接着一个文件,一行代码接着一行代码,直到你真正理解每个代码的意义。
创建自己的PHP环境
创建自己的PHP环境也是一种很珍贵的技能。这不仅能让你熟悉PHP的安装设置,还可以让你熟悉如何通过修改源码来实现功能扩展。
虚拟机和虚拟化软件也可以帮你做实验——如果出现了错误,你可以擦掉重新开始或者做一个回滚。也可以尽可能多的在字面上进行测试实验,而不用担心弄的太乱。掌握工具的使用方法是很重要的,但有一个好的工作台也是同等的重要。
用你自己创建出来的设置做实验亦可让你熟悉不同的服务器——例如什么时候要用Nginx或Apache,或者是使用Appserver等等。
尽早应用最佳实践
在编写自己代码的时候,要确保对自己的文档块严格注释、完美缩进、仔细完成架构。在构建一个类,项目或类库之后,使用性能优良的文档工具(PHPDocumentor,ApiGen)来提取文档块,并在这个文档块上进行改进。
早一点适应最佳实践能够帮助你在项目进程里保持一致,更有助于别人流利的阅读你的代码。找到你的风格并坚持下去——这对你自己和别人都有好处。
 
尝试不同的框架
    有很长一段时间,PHP是一个具备最多框架的编程语言,不管这一说法在技术社区和语言界的影响力如何,但事实是,选择一款框架是一个很纠结的事情,尤其是在刚开始的时候。
经过对大多数框架的长时间试用,这里衷心推荐Phalcon作为主力框架,主要源于其在稳健性和质量方面的优秀表现,事实上Phalcon是用C语言编写的,而且可以当作是PHP扩展框架安装。无论如何,尝试使用不同的框架绝对是很有必要的。
大量阅读资料
千万不要低估了别人给你的暗示和小建议(无论是在书上还是在工作中),尽可能多的阅读各
方面的编程知识。阅读博客、教程、在StackOverflow上面阅览问答、订阅资讯杂志等等。但是要避免基础的PHP教程书本,最好是专注于网上有用
的、最新代码的个别片段和教程。即使是已经读过的内容也可以再读几遍,一定能从别人的观点里领悟出新的想法。
 
结论
   
除此之外,在无事可做的时候,不妨自己创建一个项目:觉得日常使用的App功能太少了,自己创建一些辅助功能,或者尝试着重建一个基础的
Facebook。千万不要放松,保持自己的创造力。另外,你还可以找一个同伴/导师,相互学习的进步速度总比闭门造车的速度快很多。
当你真的专注于实践上面所提到各种方法的时候,你也许就在成为PHP专家的路上。
 
转载于:http://www.phpchina.com/archives/view-43259-1.html

怎么成为PHP专家的更多相关文章

  1. 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  2. 特邀美国EMC实战专家Mark来华授课

    “轻松搞定EMC-PCB和系统设计”课程介绍 本次课程特邀美国EMC领域权威专家Mark Montrose主讲,将涵盖满足产品电磁兼容性和信号完整性的基本原理.课程涉及多个领域,不仅仅针对PCB设计, ...

  3. [转载]ERP实施40问 60分钟外行变专家

    http://www.chinaodoo.net/thread-389-1-1.html 在多年的实践中,结合自身经验和多年的理论积累,总结出有关ERP实施的最关键的40个问题,以问答的形式,让您在最 ...

  4. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  5. [2016.01.18]文本替换专家 v5.3

    文本替换专家,界面简洁易用,功能强大实用.支持大小写匹配,支持多级目录.多行文本.多种文件格式的同时批量查找和批量替换.智能准确的区分ANSI.UTF-8(包括无BOM的UTF-8).Unicode. ...

  6. [2016.01.01]万峰文本处理专家 v2.0

    <万峰文本处理专家>是一款简单易用,且功能强大的各类文本文件处理软件.1.支持多任务的处理模式,允许一次处理多个任务.2.支持正则表达式替换,替换更加强大:3.支持各类关键字的行处理操作: ...

  7. [2016.08.09]文本替换专家 v5.2

    软件名称:文本替换专家最新版本:v5.2软件授权:共享软件发布日期:2016.01.18文件大小:650KB操作系统:XP/2003/Win7/Win2008开发人员:胡洪祥版权所有:胡洪祥

  8. [2016.01.22]万峰文本处理专家 v2.1

    <万峰文本处理专家>是一款简单易用,且功能强大的各类文本文件处理软件.1.支持多任务的处理模式,允许一次处理多个任务.2.支持正则表达式替换,替换更加强大:3.支持各类关键字的行处理操作: ...

  9. [2015.07.27]万峰图片批量处理专家 v8.6

    万峰图片批量处理专家,界面简洁易用,功能强大实用.支持多种处理任务同时按顺序执行,真正的批量图片,批量效果处理.支持图片批量自定义的放大缩小,旋转或者翻转,支持图片格式批量转换.支持图片批量文字水印, ...

  10. [2015.02.02]文本编码转换专家 v2.6

    软件名称:文本编码转换专家最新版本:v2.6操作系统:XP/2003/Win7/Win2008软件介绍:文本编码转换专家,界面简洁易用,功能强大实用.自动识别文件编码,有效转换成目标编码.真正的多线程 ...

随机推荐

  1. 【 Zabbix 】— 监控nginx

    一.环境说明 OS:centos6.7 x64 nginx:nginx/1.9.9 ZABBIX:2.4.8 zabbix监控nginx是根据nginx的stub_status模块,抓取status模 ...

  2. HDU-3374

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. k8s的DamonSet使用

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. 1.Daemo ...

  4. 使用bottle进行web开发(5):Generating Content

    在纯粹的 WSGI中,你的应用能返回的数据类型是十分有限的,你必须返回可迭代的字符串,你能返回字符串是因为字符串是可以迭代的,但是这导致服务器将你的内容按一字符一字符的传送,这个时候,Unicode ...

  5. java中Math.abs(-2147483648)的返回值应该是什么?

    我觉得这是一个非常有意思的问题,Math.abs(-2147483648)的返回值应该是什么? java计算结果 为什么没有得到正数结果呢? 首先我们先看下java区分整数正负的原理.在二进制的情况下 ...

  6. opencv3.0 legacy和nonfree丢失

    根据官方http://docs.opencv.org/3.1.0/db/dfa/tutorial_transition_guide.html链接可以知道 legacy和nofree模块已经被删除了

  7. docker官方文档中的dns,link,expose,publish

    link是过时的了,尽量不要用. dns内部集成,也可以用外部. expose只是用于记录,并不真的. publish是否起作用,也要看情况,是否被占用端口. -------------------- ...

  8. [UML] 如何找参与者、找用例

    如何找参与者 1.谁会来使用这个系统? 2.谁会来安装这个系统? 3.谁会来启动这个系统? 4.谁会来维护这个系统? 5.谁会来关闭这个系统? 6.哪些系统会来使用这个系统? 7.谁会从这个系统获取信 ...

  9. MySQL数据库增删改字段(属性)

    MySQL数据库的各种操作今天在这里总结一下: 一.增加 1.在已有的表中添加新的字段: 首先是增加表的字段,比如一张表原本没有字段“ Time ”,现在我们要增加这样一个字段,可以用下面的SQL语句 ...

  10. 对Array.prototype.slice.call()方法的理解在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢?

    1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第 ...