创建新的php实例或将其作为参数传递

时间:2014-01-28 18:06:44

标签: php oop instance

我需要这两种方案的最佳方法:

我有这些课程:

class classA{
   function func1() {
        echo "HELLO1 ";
   } 
   function func2() {
        echo "HELLO2 ";
   }   
}

class classB{
   function func1() {
      obj_a = new classA();
      obj_a->func1();

      $this->fun2($obj_a); // pass instance as parameter - scenario1

      //OR

      $this->func3();  // do not pass instance as parameter - scenario2 
   }

   function func2($obj_a) {
        $this->fun2($obj_a);
   }

   function func3() {
        $obj_a = new classA();
        $this->fun2($obj_a);
   }
}

$b = new classB();
$b->func1(); // HELLO1 HELLO2

使用哪一种最佳做法:

  1. $这 - > FUN2($ OBJ_A); //将实例作为参数传递 - scenario1
  2. $这 - > FUNC3(); //不要将实例作为参数传递 - scenario2

2 个答案:

答案 0 :(得分:0)

什么是最好的取决于你需要做什么。这是另一个有用的场景。

class classC{
    protected $classA

    public function __construction(classA $classA) {
        $this->classA = $classA;
    }
    public function func2() {
        $this->classA->fun2();
    }
}
$classA = new classA();
$classC = new classC($classA);

答案 1 :(得分:0)

如果A类方法基于实例的属性,则所有方法都取决于您想要传递实例(以及属性值)或者是否需要新初始化的对象。

如果A类方法不是基于实例的状态,那么您的方法应该是静态的,并且您不必随时实例化A类:

class classA {
   public static function func1() {
        echo "HELLO1 ";
   } 
   public static function func2() {
        echo "HELLO2 ";
   }   
}

class classB {
   function func1() {
      $this->fun(); 
   }

   function fun() {
      ClassA::func1();
   }
}