PHP面向对象的函数 - 传递变量

时间:2012-09-28 00:37:26

标签: php oop

我正在抛出两种在类中的方法中使用变量的方法。某些方法最多使用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 个答案:

答案 0 :(得分:1)

第二种方式,因为它更符合得墨忒耳法则:

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

答案 1 :(得分: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;
  }

}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

TL; DR:


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

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

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

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