【发布时间】:2010-09-03 14:24:51
【问题描述】:
我正在过渡到在我的所有项目中使用 OOP,从历史上看,我构建的所有东西都非常小,OOP 似乎不是一个有效的选择,但现在对于大型项目来说它是一个有效的选择。然而,最近我遇到了越来越多的“最佳实践”问题,但我找不到答案。
例如,假设我有以下内容:
class numbers{
function __construct($number){
$this->number = (int)$number;
}
function add($add){
$this->added = $this->number + $add;
}
function multiply($multiply){
$this->multiplied = $this->number * $multiply;
}
function minus($minus){
$this->minused = $this->number - $minus;
}
function number(){
return $this->number();
}
}
现在假设我想申请add,然后是multiply,然后是minus。每个阶段都可能失败(我没有在示例中包含它,但想象一下它就在那里)。这就是我的问题所在,我应该这样做:
$numbers = new numbers(8);
if($numbers->add(7)){
if($numbers->multiply(6)){
if($numbers->minus(7){
echo $numbers->number();
}else{
echo 'error minusing';
}
}else{
echo 'error multiplying number';
}
}else{
echo 'error adding number';
}
或者我应该在我的构造函数中有那个部分,比如:
class numbers{
function __construct($number){
$this->add(6);
$this->multiply(9);
$this->minus(7);
if($this->error){
return false;
}else{
return true;
}
}
function add($add){
$this->added = $this->number + $add;
if(!this->added){
$this->error = "couldn't be added";
}
}
function multiply($multiply){
$this->multiplied = $this->number * $multiply;
if(!this->multiplied){
$this->error = "couldn't be multiplied";
}
}
function minus($minus){
$this->minused = $this->number - $minus;
if(!this->minused){
$this->error = "couldn't be minused";
}
}
function number(){
return $this->number();
}
function error(){
return $this->error();
}
}
然后简单地做:
$numbers = new numbers(5);
if($numbers){
echo $numbers->number();
}else{
echo $numbers->error();
}
对不起,如果这个例子是冗长的(也忽略错误,我在这里写它只是为了概述我正在尝试做的事情,这不是我正在使用的代码......)但我不知道如何在没有示例的情况下表达问题。基本上,我应该在课堂上检查错误还是应该在上课时在外面做?
【问题讨论】:
-
@FrustratedWithFormsDesigner:为什么要编辑?该方法称为“减号”——在这种情况下使用动词形式是完全可以接受的。我认为您的编辑使问题更加混乱,而不是更少。
-
@Gian:当使用方法名称作为动词时,通常最好明确说明您是在谈论方法,而不是一般的、更相似的动词。这个:“我想
add,然后是multiply,然后是minus。”清楚地表明您正在谈论调用minus方法,而不是试图将“减号”一词误用作动词。 -
在英语世界中,它被称为减法。减号是一个符号。
-
@Frustrated,我同意,我认为这会是一个更好的编辑。 @hopeseekr,这完全忽略了OP将方法命名为“减号”这一事实,因此术语一致性表明继续使用相同的术语(对或错)比依赖外部定义更有意义。方法名称也可以是“apple”、“pear”和“banana”,然后句子会是“I want to apple, then pear, then banana”。这是非标准用法,但在英语中肯定有优先权(另外,我也是母语人士)。