0

我折腾了两种在类中的方法中使用变量的方法。有些方法最多使用 20 个变量。哪个示例最能满足 OOP 编程结构以及原因

**Example 1:**

$sampleclass->variable1 = 100;
$sampleclass->variable2 = 200;
$sampleclass->variable3 = 300;

$row = $sampleclass->Method();

--------------------------

class sampleclass {

  public function Method(){
    if ($this->variable1) {
         // do something
    }
     if ($this->variable2) {
         // do something
    }
     if ($this->variable3) {
         // do something
    }

  }
}



============================================

**Example 2:**

$row = $sampleclass->Method(100,200.300);


class sampleclass {

  public function Method($variable1, $variable2, $variable3){

  }
}
4

4 回答 4

1

第二种方式更符合得墨忒耳法则:

http://en.wikipedia.org/wiki/Law_of_Demeter

于 2012-09-28T00:41:25.613 回答
0

也许您应该考虑为每个变量创建一个方法?也就是说,如果您需要对所有三个值执行不同的操作,您可以封装每个变量赋值。

例如:

class sampleclass 
{

  public function doSomethingWithA($value) 
  {
    $this->valueA = $value * 2;
  }

  public function doSomethingWithB($value) 
  {
    $this->valueB = $value * 3;
  }

  public function doSomethingWithC($value) 
  {
    $this->valueC = $value * 2;
  }

}
于 2012-09-28T00:44:36.433 回答
0

如果您希望将这些变量存储在对象中,请为它们设置(私有)数据成员。您还应该定义“getter”或 mutator 函数,或者至少是一个构造函数,它为这些数据成员获取所需的值。这些功能将防止直接设置数据,从而使您有机会强制执行有关数据值的规则,并防止它们被更改为不适当或不一致的值。

于 2012-09-28T00:50:58.853 回答
0

TL;DR:两者都不是。


如果您基于 3 个不同的条件有 3 个不同的执行,那么应该为每个执行单独的方法。生成的 API 应该类似于:

$instance->someMethod( 100 );
$instance->differntMethod( 200 );
$instance->thirdMethod( 300 );
$result = $instance->produceResult();

该对象应该保持状态。您有 3 种不同的方法可以改变该状态。还有一种返回数据的方法。无需if声明。

要了解有关该主题的更多信息,我建议您观看讲座和讲座

于 2012-09-28T00:53:34.717 回答