找回密码
 申请新用户
搜索
热搜: 活动 交友 discuz
查看: 8651|回复: 1

40个迹象表明你还是PHP菜鸟

[复制链接]
发表于 2009-2-20 14:06:41 | 显示全部楼层 |阅读模式
原文作者:Reinhold Weber
原文链接:40 signs you really are a lousy PHP programmer
译者:davidkoree
40个迹象表明你还是PHP菜鸟
我愿意把本文归入我的“编程糗事”系列。尽管在正规大学课程中,接触到软件工程、企业级软件架构和数据库设计,但我还是时不时地体会到下述事实带给我的“罪恶”感,当然,都是我的主观感受,并且面向Eclipse:
你是PHP菜鸟,如果你:
1. 不会利用如phpDoc这样的工具来恰当地注释你的代码
2. 对优秀的集成开发环境如Zend Studio或Eclipse PDT视而不见
3. 从未用过任何形式的版本控制系统,如Subclipse
4. 不采用某种编码与命名标准,以及通用约定,不能在项目开发周期里贯彻落实
5. 不使用统一开发方式
6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函数)
7. 不在编码之前彻底规划你的程序
8. 不使用测试驱动开发
9. 不在错误开启状态下进行编码和测试(译注:参考PHP函数error_reporting)
10. 对调试器的好处视而不见
11. 不重构你的代码
12. 不使用类似MVC模式把程序的不同层次划分开
13. 不知道这些概念:KISS, DRY, MVC, OOP, REST
14. 不用return而是直接在你的函数或类中输出(echo/print)内容
15. 对单元测试或通用测试的优点视而不见
16. 总是返回硬编码的HTML,却不返回纯粹的数据,字符串,或对象
17. 总是对“消息”和“配置参数”进行硬编码
18. 不对SQL查询语句做优化
19. 不使用__autoload(译注:参考PHP手册相关描述)
20. 不允许智能错误处理(译注:参考PEAR的ErrorStack)
21. 使用$_GET替代$_POST来做具有破坏性的传递操作
22. 不知道怎么利用正则表达式
23. 从未听说过SQL注入或跨站脚本
24. 不允许简易配置,也不允许类的构造函数接受参数传递而后执行set/get方法,或运行时的常量定义
25. 不理解面向对象编程(OOP)的优势和劣势
26. 不视情形大小而滥用OOP
27. 自认为实现可复用的软件一定等于/需要让你的代码遵循OOP
28. 不利用智能缺省值
29. 没有单一的配置文件
30. 不想暴露文件源码,却用.inc后缀名取代了.php
31. 不使用数据库抽象层
32. 不能保持DRY作风,即不重复自己,如果你总是在复制粘贴一些东西,说明你设计得很差劲
33. 没有实现让一个函数/类/方法只做一件事,也不能组合利用它们
34. 没能尝试OOP的特长,如抽象类、接口、多态、继承,访问控制修饰符(译注:如public, private, protected)
35. 不用现有的设计模式优化你的程序体系设计
36. 不允许你的用户在你拥有很多文件或目录的情况下定义基础目录
37. 污染了名称空间,比如用常见字符串命名你的库函数
38. 使用数据库表时不使用表前缀
39. 不使用统一的模板引擎
40. 不关注已有的PHP开发框架,懒于探索;其实先进的开发理念和美妙代码就蕴含其中。
译注:另有马永占翻译版本《PHP程序员的40点陋习》,简洁并配有译者注释。
 楼主| 发表于 2009-2-20 14:06:59 | 显示全部楼层
Reinhold Weber 提出PHP程序员的40点陋习.(本E问只写了一部分内容,译者找到原版翻译,以下是完全版)

       1不写注释

       2不使用可以提高生产效率的IDE工具

       3不使用版本控制

       4不按照编程规范写代码

       5不使用统一的方法

       6编码前不去思考和计划

       7在执行sql前不执行编码和安全检测

       8不使用测试驱动开发

       9编码时不打开自动报错(error_reporting)

       10不使用一种好的调试工具

       11不重构你的代码(refactor)

       12不采用MVC这样的分层结构

       13不知道以下等等概念:KISS,DRY,MVC,OOP,REST

       14在函数或者类里直接用print或者echo输出东西而不是返回(return)

       15不使用也不去了解单元测试

       16返回HTMl而不是data,strings,objects等类型

       17糟糕的代码和配置参数(hard code messages and configuration parameters)

       18不优化sql查询

       19不使用__autoload

       20不支持自动错误操作(应该是智能纠错)

       21使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)

       22不知道怎样使用正则表达式

       23从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)

       24不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量

       25不能理解OOP的优缺点

       26无论要做的东西有多小,都使用OOP

       27认为做可复用的软件就是OOP

       28不使用缺省值(don't choose intelligent defaults)

       29不使用单一配置文件

       30不想让别人看到代码,却使用.inc替换掉.php

       31不使用数据库抽象层(持久层)

       32开发时不DRY(Dont repeat yourself). (就是总开发重复的东西)

       33不开发可以重复使用的类或者方法.

       34不使用抽象类或者接口类,继承,多态,封装.

       35不使用已有的设计模式优化你的程序.

       36不允许使用者定义基础目录(这点好象PHP不太适合,毕竟不是基于操作系统的开发)

       37错误的使用命名空间,使用大家都普遍使用的单词作为前缀.(这样以后别人使用会造成冲突.,例如自己定义一个function 叫 array_push())

       38使用数据库时不使用表前缀(这个很重要...)

       39不使用或者使用一个陌生的模板引擎(方便团队开发,大家要使用常见的模板)

       40不去看PHP的框架(大多数框架中都包含优秀的代码和先进的概念.值得我们学习)

其中译者还有很多做不到的,还需要努力!



以下是原文:



   1. don't comment your code properly with something like phpDoc



   2. don't see the need and/or benefits of a good programming IDE like Zend Studio or Eclipse PDT



   3. have never used some form of version control like Subclipse



   4. don't adopt some coding & naming standards and general conventions and stick to to them at least throughout the project



   5. don't use a consistent methodology



   6. don't escape and/or validate properly input or sql queries



   7. don't plan your application thoroughly before starting to code



   8. don't use test-driven development



   9. don't program & test with error reporting on



  10. don't see the benefits of a debugger



  11. don't refactor your code



  12. don't keep the different layers seperated using something like MVC



  13. don't know what these stand for: KISS, DRY, MVC, OOP, REST



  14. don't return content but echo or print it from your functions or classes



  15. have never seen the advantage of unit tests or testing in general



  16. return HTML, not data, strings, or objects.



  17. hard code messages and configuration parameters



  18. don't optimize your sql queries



  19. don't use __autoload



  20. don't allow intelligent error handling



  21. use $_GET instead of $_POST for any destructive actions



  22. don't know how to use regular expressions



  23. you've never heard of sql injection or cross-site scripting



  24. don't allow simple configuration, can be parameters passed to a class’s constructor, set/get methods called later, or constants defined at a runtime.



  25. don't understand the benefits and limitations of Object Oriented Programming



  26. misuse OOP / everything you write , no matter how small is OOP



  27. you think reusable software equals/requires your code to be OOP



  28. don't choose intelligent defaults



  29. don't have one single configuration file



  30. don't want the file contents to be seen, but give it a .inc extension instead of .php



  31. don't use a database abstraction layer



  32. don't keep it DRY, Don't repeat yourself. If you have to copy and paste or duplicate something your design may be off.



  33. don't make a function/class/method do just one thing and don't make them interact.



  34. don't try to take advantage of OOP specific features like abstract/interface classes, inheritage polymorphism & access modifiers.



  35. don't optimize your application design with established design patterns



  36. don't allow your user to define a base directory if you have multiple files and/or directories



  37. pollute the global namespace, one option is to prefix the functions in your library with a common string



  38. don't allow a table prefix when using database tables



  39. use a separate template engine



  40. don't take a look at established php frameworks for inspiration, most of them have advanced web dev concepts and good code
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 申请新用户

本版积分规则

守望轩 ( 湘ICP备17013730号-2 )|网站地图

GMT+8, 2024-3-28 22:09 , Processed in 0.066211 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表