PHP和编写干净的代码
我试图找到编写PHP的最佳实践 我只是想知道这是个坏习惯吗 例如,处理变量PHP和编写干净的代码,php,coding-style,code-formatting,Php,Coding Style,Code Formatting,我试图找到编写PHP的最佳实践 我只是想知道这是个坏习惯吗 例如,处理变量 $var = 1 $var = doSomething($var); $var = doSomething2($var); $var = doSomething3($var); 看起来有点糟糕 下面是一个我刚刚编写的真实代码示例: $this->rSum = explode(",", $this->options["rSum"]); $this->rSum = array_combine(array_
$var = 1
$var = doSomething($var);
$var = doSomething2($var);
$var = doSomething3($var);
看起来有点糟糕
下面是一个我刚刚编写的真实代码示例:
$this->rSum = explode(",", $this->options["rSum"]);
$this->rSum = array_combine(array_values($this->rSum), array_fill(0, count($this->rSum), 0));
如果有人能给我一些编写干净代码的好教程,那就太好了
又是我问了愚蠢的问题
顺便说一下 模型中可以有多少自动处理 我有一个模型,它有一个execute方法,当我调用它时,它会做很多事情,比如读取定义文件和进行数据库查询 比如说
$object = new Object()
$object->setFile("example.txt");
$object->execute();
// Then i can fetch things from it
echo $object->getName();
$object->getAnotherObject()->getAThirdObject()->doSomething();
最重要的是,保持一致在我看来,智能代码不一定是好代码。我个人更喜欢干净、简单、易懂的代码。你的2行代码会让你的同伴认真思考,而不是你的init“坏”代码
这只是我的想法。除了编码标准之外,您还可以使用它来获取现有代码的一般提示。同意Jim Li的观点,我也更喜欢可读代码而不是微优化或智能但丑陋的单行代码 我在第一个示例中遇到的唯一问题是,它使用面向过程的函数,我最好重写OOP(像这样的函数调用可以链接起来,并且易于阅读) PHP没有强大的OOP目标,因为它在API中主要使用过程语句。但我更喜欢用OO的方式编写代码,这种方式可以很好地解耦和组织,而不是让一大堆函数和大量参数一起工作 我真的很喜欢你的(真实的)代码,而且我通常很难喜欢其他人的代码(我没有太多时间钻研ZF,但PEAR(例如,他们也有自己的编码标准)在我看来太糟糕了),你给出的第一个示例看起来很愚蠢,但是关于第二个,至少对我来说,这是很容易理解的,从您提供的简短代码片段来看,您似乎有一个一致的编码风格,并且在正确的位置使用了正确数量的空格——这对于干净的代码非常重要(如果您不相信我,请看一些Perl代码片段) 我只想指出三点:
rSum
对于属性来说不是一个糟糕的名称,但它所包含的值并不十分清楚,也许您可以为该属性找到一个更具描述性的名称0
),下面是另一个工作选项:
$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0);
这里似乎有很多人不喜欢一行程序,但我相信上面的代码是清晰、高效和描述性的,但这可能只是我…=) 在一行中尝试做所有事情都会导致代码假设。当我不得不继续修理它们时,我觉得这很烦人。这在对象链接中更常见。比如说
$object = new Object()
$object->setFile("example.txt");
$object->execute();
// Then i can fetch things from it
echo $object->getName();
$object->getAnotherObject()->getAThirdObject()->doSomething();
很多人会告诉你,它更容易阅读;然而,它依赖于每次返回都是一个对象。我宁愿返回每一个并检查响应
$secondObject = $object->getAnotherObject();
if ( is_object($secondObject) ) {
$thirdObject = $secondObject->getAThirdObject();
if ( is_object($thirdObject) ) {
$thirdObject->doSomething();
}
}
当然,它需要更多的按键,但爆炸的可能性更小,而且,我认为无论如何,它更容易阅读
尽管值得重复鲍里斯·盖里的话保持一致。“更干净?!更容易阅读?!”例如,SQL Builder类:
$SQL->select('posts','title')->其中(数组('user_id'=>5))->顺序('date','desc')->限制(10)代码>,使用您的方法,这将需要5个无用的缩进级别,因为在fluent接口中,所有方法都应该返回对象,无论发生什么。当您知道返回的是什么时,这是很好的。当你跳入一个项目,并且在编写代码时必须开始理解时,情况如何?你不能把事情建立在最佳情况的基础上。如果有人更新了您正在处理的项目的一部分,并使某个项目返回一个对象数组,该怎么办?demeter法则呢?如果$secondObject
不是对象,该怎么办?单元测试应该管理这个,而不是应用程序代码。