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

创建新的php实例或将其作为参数传递,php,oop,instance,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-&g

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

我有以下课程:

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
使用哪一种最佳实践:

  • $this->fun2($obj_a);//将实例作为参数传递-场景1
  • $this->func3();//不要将实例作为参数传递-场景2

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

    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);
    

    如果类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();
       }
    }