哪些是有用的PHP习惯用法?
我希望改进我的PHP编码,我想知道其他程序员使用哪些特定于PHP的技术来提高生产率或解决PHP的局限性 一些例子:哪些是有用的PHP习惯用法?,php,conventions,Php,Conventions,我希望改进我的PHP编码,我想知道其他程序员使用哪些特定于PHP的技术来提高生产率或解决PHP的局限性 一些例子: 处理名称空间的类命名约定:Part1\u Part2\u ClassName映射到文件Part1/Part2/ClassName.php if(count($arrayName))//处理$arrayName未设置或为空的情况 变量函数名,例如,$func='foo'$func($bar);//呼叫foo($bar) 我的PHP经验教会了我一些东西。举几个例子: 总是输出错误。以
Part1\u Part2\u ClassName
映射到文件Part1/Part2/ClassName.php
if(count($arrayName))//处理$arrayName未设置或为空的情况
$func='foo'$func($bar);//呼叫foo($bar)代码>
我的PHP经验教会了我一些东西。举几个例子:
- 总是输出错误。以下是我典型项目(开发模式)的前两行:
- 切勿使用automagic。像autoLoad这样的东西将来可能会咬你
- 始终使用
要求依赖类。这样你就可以确定你的依赖关系是正确的require\u一次
- 使用
而不是if(isset($array[$key]))
。如果未定义密钥,则第二个将发出警告if($array[$key])
- 在定义变量时(即使使用
循环),也要给变量指定详细的名称(for
而不是$listIndex
)$j
- 评论,评论,评论。如果某段代码看起来不明显,请留下注释。稍后您可能需要查看它,但可能不记得它的用途
另外,在开发模式下,我设置了一个错误处理程序,只要出现一点错误(甚至警告),就会输出一个错误页面,这给了我一个提示。幸运的是,名称空间在5.3和6中。我强烈建议不要使用路径到类名的习惯用法。它会产生混乱的代码,而且您永远无法更改库结构。。。永远 SPL的自动加载非常好。如果您有组织,它可以在每个文件的顶部为您保存包含和要求的典型20行块。您还可以更改代码库中的内容,只要PHP可以包含这些目录中的内容,任何内容都不会中断 在
==
上自由使用===
。例如:
if (array_search('needle',$array) == false) {
// it's not there, i think...
}
如果“针”位于零键,将给出假阴性。相反:
if (array_search('needle',$array) === false) {
// it's not there!
}
将始终是准确的。请参见以下问题:。它有很多非常有用的PHP技巧,其中最好的技巧已经跃居榜首。在过去5年中,我一直在使用PHP(和MySQL)进行开发。最近,我开始使用一个框架()和一个坚实的javascript库(),它永远改变了我的工作方式(我认为这是一个很好的方式) 让我想到这一点的是您的第一个要点:Zend framework正是以标准方式访问“控制器”和“操作”的 在用不同的数据库封装和抽象问题方面,Zend_Db做得非常好。Dojo在消除不同浏览器之间javascript不一致方面做得非常好 总的来说,学习好的OOP技术是值得的,使用(和阅读!)框架是理解OOP问题的一种非常实用的方法 有关一些值得使用的独立工具,请参见: (模板引擎)
(数据库访问抽象)我在PHP中做的一些事情往往是特定于PHP的
最终,您将首先通过学习一般良好的编程实践,然后再关注任何特定于PHP的内容,从而充分利用PHP。话虽如此
为了乐趣和利益而自由申请:
spl\u autoload\u register()
,而不是\u autoload()
。为了获得额外的积分,让它递归地扫描目录树,然后随意地将您的类重新组织为更具逻辑性的目录结构function f(SomeClass $x, array $y, $z) {
assert(is_bool($z))
}
header('Content-type: text/xml'); // or text/css, application/pdf, or...
define()
全局常量替换为类常量日期
类替换Unix时间戳unset()
愉快地使用:
ob_start();
echo "whatever\n";
debug_print_backtrace();
$s = ob_get_clean();
除非绝对必要,否则不要这样做,除非你真的讨厌维护程序员和你自己:
\u获取
,\u设置
,\u调用
)extract()
ini\u集('display\u errors',1);错误报告(E_全部和&$严格)代码>
ob_start();
echo "whatever\n";
debug_print_backtrace();
$s = ob_get_clean();