我正在寻求改进我的PHP编码,并想知道其他程序员使用什么特定于PHP的技术来提高生产力或解决PHP限制.
一些例子:
处理命名空间的类命名约定:Part1_Part2_ClassName
映射到文件Part1/Part2/ClassName.php
if ( count($arrayName) ) // handles $arrayName being unset or empty
变量函数名称,例如 $func = 'foo'; $func($bar); // calls foo($bar);
Pre*_*ton 13
最后,在专注于特定于PHP的任何内容之前,通过学习一般良好的编程实践,您将首先充分利用PHP.话说回来...
foreach循环中的迭代器.几乎从来没有错误的时间.
围绕类自动加载设计.使用spl_autoload_register()
,而不是__autoload()
.对于奖励积分,让它以递归方式扫描目录树,然后随意将您的类重组为更逻辑的目录结构.
到处输入.对标量使用断言.
function f(SomeClass $x, array $y, $z) {
assert(is_bool($z))
}
Run Code Online (Sandbox Code Playgroud)输出HTML以外的内容.
header('Content-type: text/xml'); // or text/css, application/pdf, or...
Run Code Online (Sandbox Code Playgroud)学习使用例外.编写一个错误处理程序,将错误转换为异常.
define()
用类常量替换全局常量.
用适当的Date
类替换你的Unix时间戳.
在长函数中,unset()
变量就完成了.
循环遍历对象的数据成员,如数组.感到内疚,他们没有被宣布为私人.这不是像Python或Lisp这样的异教徒语言.
使用输出缓冲区来组合长字符串.
ob_start();
echo "whatever\n";
debug_print_backtrace();
$s = ob_get_clean();
Run Code Online (Sandbox Code Playgroud)魔术方法(__get
,__set
,__call
)
extract()
结构化数组 - 使用对象
cha*_*log 10
我在PHP方面的经验教会了我一些东西.仅举几例:
ini_set('display_errors', '1');
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
永远不要使用自动化.像autoLoad这样的东西可能会在将来咬你.
始终要求使用依赖类require_once
.这样你就可以确定你的依赖关系是直的.
用if(isset($array[$key]))
而不是if($array[$key])
.如果未定义密钥,则第二个将发出警告.
定义变量时(即使是for
循环)给它们提供详细的名称($listIndex
而不是$j
)
评论,评论,评论.如果特定的代码片段看起来不明显,请发表评论.稍后你可能需要检查它,可能不记得它的目的是什么.
除此之外,类,函数和变量命名约定由您和您的团队决定.最近我一直在使用Zend Framework的命名约定,因为他们觉得我很对.
此外,当处于开发模式时,我设置了一个错误处理程序,它将在最轻微的错误(甚至是警告)时输出错误页面,从而为我提供完整的回溯.
幸运的是,名称空间在5.3和6中.我强烈建议不要使用Path_To_ClassName惯用法.它会使代码变得混乱,你永远不会改变你的库结构......
SPL的自动加载很棒.如果您有条理,它可以为您节省典型的20行包含块,并且需要在每个文件的顶部.您也可以在代码库中更改内容,只要PHP可以从这些目录中包含,就不会有任何中断.
自由使用===
结束==
.例如:
if (array_search('needle',$array) == false) {
// it's not there, i think...
}
Run Code Online (Sandbox Code Playgroud)
如果'needle'处于关键零点,则会给出假阴性.代替:
if (array_search('needle',$array) === false) {
// it's not there!
}
Run Code Online (Sandbox Code Playgroud)
永远是准确的.
归档时间: |
|
查看次数: |
3759 次 |
最近记录: |