原文:http://reinholdweber.com/?p=19英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。40个迹象表明你还是PHP菜鸟
我愿意把本文归入我的“编程糗事”系列。尽管在正规大学课程中,接触到软件工程、企业级软件架构和数据库设计,但我还是时不时地体会到下述事实带给我的“罪恶”感,当然,都是我的主观感受,并且面向Eclipse:
你是PHP菜鸟,如果你:
1. 不会利用如phpDoc这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio或Eclipse PDT视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函数)7. 不在编码之前彻底规划你的程序8. 不使用测试驱动开发9. 不在错误开启状态下进行编码和测试(译注:参考PHP函数error_reporting)10. 对调试器的好处视而不见11. 不重构你的代码12. 不使用类似MVC模式把程序的不同层次划分开13. 不知道这些概念:KISS, DRY, MVC, OOP, REST14. 不用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. 不视情形大小而滥用OOP27. 自认为实现可复用的软件一定等于/需要让你的代码遵循OOP28. 不利用智能缺省值29. 没有单一的配置文件30. 不想暴露文件源码,却用.inc后缀名取代了.php31. 不使用数据库抽象层32. 不能保持DRY作风,即不重复自己,如果你总是在复制粘贴一些东西,说明你设计得很差劲33. 没有实现让一个函数/类/方法只做一件事,也不能组合利用它们34. 没能尝试OOP的特长,如抽象类、接口、多态、继承,访问控制修饰符(译注:如public, private, protected)35. 不用现有的设计模式优化你的程序体系设计36. 不允许你的用户在你拥有很多文件或目录的情况下定义基础目录37. 污染了名称空间,比如用常见字符串命名你的库函数38. 使用数据库表时不使用表前缀39. 不使用统一的模板引擎40. 不关注已有的PHP开发框架,懒于探索;其实先进的开发理念和美妙代码就蕴含其中。
阅读全文——共1410字
TP的模型的默认情况是一个数据表对应一个Model类如果你的模型是没有确定的数据表可以对应(或者说需要操作多个数据表),在这种情况下,应该如何创建模型呢?
其实,TP提供了一个机制来解决这样的问题,尤其是你需要经常使用原生SQL的时候,这个机制会非常有帮助。下面来看一段代码:
代码: 复制内容到剪贴板
前不久刚刚确定了使用jquey作为js库,现在又确定了thinkphp作为php框架,其实也没怎么选择,不知道从哪个广告看到的,然后大致看了一下,觉得比较喜欢,就这么定下来了!
现在正在痛苦的学习中,帮助资料实在是太少了,而且也不详细!!
希望以后能更好
{$k} {$vo.name}
Thinkphp教程
1 熟悉Thinkphp1.1 什么是ThinkphpThinkphp是一个开源的PHP框架,遵循Apache2开源协议发布。使用面向对象的开发结构和MVC模式,封装了CURD和一些常用操作,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现。[separator]1.2 学习Thinkphp需要具备什么样的条件学习框架前,你需要了解PHP、数据库的基础知识,同时对面向对象编程有一定了解,如果这些你还不具备,建议你先看看基础知识。Web开发除了掌握服务端脚本,客户端的JS、CSS等方面的知识也是必不可少的。所以我建议朋友们在开始使用框架时,先尽可能的充实自己,掌握基础知识。开始后面的学习前,建议现把Thinkphp的开发手册看一遍,这样说到什么概念的时候你心中有数。1.3 我希望了解更多关于Thinkphp的信息你可以访问官方网站http://www.thinkphp.cn。建议下载Thinkphp的开发手册和API手册,便于查找相关信息。1.4 Thinkphp入门(1) 项目的创建你可以到官方网站下载Thinkphp代码生成器,或者访问http://hi.baidu.com/yhustc下载代码生成器,代码生成器运行需要.NET 2.0支持。运行代码生成器后选择菜单“项目”->“生产项目目录”,或者使用快捷键“Ctrl+G”打开项目目录生产程序,按要求填写配置信息即可。这里数据库相关的信息我们留空。thinkphp1.0.2版本使用Conf\config.php作为配置文件,而非以前的Conf\_config.php,请自行修改项目生成的批处理程序,修改一下配置文件的文件名。事实上,thinkphp1.0.2版本有自动生成项目目录的功能,直接放置index.php到项目目录下,访问一下后项目其他目录自动生成。(2) 编写Hello world示例Thinkphp是单一入口模式,也就是说所有流程都是从index.php开始的。项目目录下的index.php我们称之为入口文件。你所编写的Action,使用http://server/project/index.php/Action/function的形式访问。执行index.php的时候,Thinkphp的dispatch模块会自动分析应该加载哪个Action,并调用相应的函数。Hello world示例没有与数据库的交互,如果只是要输出一个“Hello world”的字符串的话,我们在index.php里面echo都可以了。不过这样的话没有达到演示框架的目的,我们按常规路线来搞:如果直接访问http://server/project/index.php,框架默认调用IndexAction(这个默认的Action是可以配置的,详情参见Thinkphp开发手册),使用http://server/project/index.php/Action的形式,默认访问该Action的index方法。所有Action、Model以及模板文件都应该使用UTF8编码。我们在Lib\Action目录下编写一个IndexAction.class.php,内容如下: 默认访问IndexAction的index方法,所以访问http://server/project/index.php和访问http://server/project/index.php/Index/index效果是一样的(Linux区分文件名大小写,所有应该确保Action名称大小写与文件名一致)。页面输出Hello world。 下面我们演示一下如何用模板输出变量。 在Tpl目录下新建default目录,这是默认的模板,多模板的话就建多个文件夹。然后在default目录下新建Index目录,该目录名与Action对应。然后新建index.html,该文件名默认与调用的方法一致。编写index.html内容如下:{$str}然后我们修改开始编写的index方法,内容如下:function index(){ $this->assign(“str”, “Hello world”); $this->display();}访问http://server/project/index.php,页面源码为Hello world。2 Thinkphp的CURDCURD需要涉及到数据库部分,而且模板显示内容一般也是跟数据库紧密集合的。所以准备了一个非常简单的BBS的例子。先看一下数据库结构。
阅读全文——共1977字
ThinkPHP值得推荐的特性[汇总]
摘录自之前的开发指南文档,并修正了由于版本不同而存在的一些错误。主要目的是为了介绍ThinkPHP的特性,对于理解ThinkPHP的思想有一定帮助。
[separator]1:项目编译机制2:分布式数据库支持 3:多数据库支持4:项目自动生成 5:内置模板引擎6:ActiveRecord模式 7:CURD和高度自动化支持 8:系统基类库 9:可配置静态缓存 10:模型自动验证和处理11:灵活简单的项目配置 12:MVC和执行过程13:丰富的查询语言 14:富模型 15:自动编码转换16:多元化缓存机制