Php Laravel多对象实例化

Php Laravel多对象实例化,php,oop,laravel,Php,Oop,Laravel,我对Laravel还很陌生,想知道实例化多个对象并使其可用于我的类的最有效的方法是什么 我目前正在做的一个例子是,类似于sudo代码: //MainController.php <?php Class MainController extends BaseController { public function __construct() { parent::construct(); } // class code

我对Laravel还很陌生,想知道实例化多个对象并使其可用于我的类的最有效的方法是什么

我目前正在做的一个例子是,类似于sudo代码:

//MainController.php

<?php

Class MainController extends BaseController {

     public function __construct() {
          parent::construct();         
     }

     // class code follows
}

这是早期阶段,我正在进行重构,这就是类依赖性问题的来源

首先,除非MainController上的构造函数具有更多逻辑,否则您可以将构造函数全部省略,然后直接调用BaseController构造函数

您可以这样做:

 Class BaseController extends Controller {

      protected $classFile;
      //repeat for all classes

      function classFile() {
           if(!$this->classFile) $this->clasFile = new classFile;
           return $this->classFile;
      }
      //repeat for all classes

      function useExample() {
           $this->classFile()->randomMethod();
      }  

 }
。。。这样,至少你不需要太多的实例

比因说,听起来你真正想要的是外观,你可以去:

$channels = ChannelRepository::getChannels();

阅读并使用以下内容:@Sergiu使用IoC,每次构建BaseController或其子类时,所有10+类都会被实例化,不是吗?啊,我的错,使用App::singleton并返回工厂可能会奏效,我猜你介意提供更多的真实示例吗?您的代码表示有点代码味道。一个控制器中的14个依赖项可能不是您想要的方式。我对Laravels IOC容器有一个基本的了解,我认为。。。如果我错了,请纠正我-在这种情况下,在整个应用程序中绑定我需要的类一个API,然后通过构造函数自动解析它们,这仍然意味着我需要键入hint并为需要使用它们的每个类创建10个示例对象中的每一个,如Laravel文档中给出的示例,对吗?这实际上是我在把它们移到BaseController Classis之前的开始,我不认为让一个控制器作为一个工厂是一个非常好的主意。这种方式产生的开销比目前还要多。@fiffen谢谢。我在整个应用程序中使用facades和我的存储库等。我需要做的是从数据库中提取大量数据,对其进行迭代以获得我需要的数据,对其进行格式化,并将其返回到预定义的响应对象中,以便移动应用程序接收。我不太明白如何减少单个控制器操作中的依赖性以实现相同的目标,因此我提出了问题。好的例子,谢谢。你可以编写一个类来接收查询,使用服务提取数据,使用映射器将数据映射到你需要的结构,然后返回。谢谢@SergiuParaschiv。你对模块的评论让我思考,我认为你在这里的例子一针见血。在某种程度上,我已经用我的变形金刚做到了这一点,但我的控制器中仍然有更多的逻辑,并且对这些逻辑有太多的依赖性。不错。
 Class BaseController extends Controller {

      protected $classFile;
      //repeat for all classes

      function classFile() {
           if(!$this->classFile) $this->clasFile = new classFile;
           return $this->classFile;
      }
      //repeat for all classes

      function useExample() {
           $this->classFile()->randomMethod();
      }  

 }
$channels = ChannelRepository::getChannels();