【问题标题】:Initiate a class by calling a function that returns an instance of that class - PHP?通过调用一个返回该类实例的函数来启动一个类 - PHP?
【发布时间】:2009-04-07 19:48:13
【问题描述】:
class foo(){

   function bar()
   {
     $classInstance = $this->createClassInstance($params);
     $result = $classInstance->getSomething();
   }

   function createClassInstance($params)
   {
     require 'path/to/class.php';
     $myClass = new Class;
     $myClass->acceptParams($params['1']);
     $myClass->acceptMoreParams($params['2']);
     .... lots more params
     return $myClass;
   }

}

我可以通过调用返回类对象的方法来启动一个新类吗?有问题的类有很多参数,我需要在 bar() 中多次调用它,所以我认为这样做会更整洁,但我无法让它工作并想检查它是否可能 + 好练习?

【问题讨论】:

    标签: php class initialization


    【解决方案1】:

    这叫做工厂类 (Factory OO Design Pattern)。

    应该如何在 PHP 中完成:http://www.php.net/manual/en/language.oop5.patterns.php

    【讨论】:

      【解决方案2】:

      我认为您描述的是工厂模式,但您使用参数来设置类变量,就像在构造函数中一样,那么为什么不直接使用呢?

      编辑:

      啊,如果您在大多数情况下使用相同的参数,那么您肯定需要工厂模式。只需使用静态函数返回类的实例,并将其放入您要返回的类的类型中:

      class MyClass
      {
          public static function factory($params)
          {
              $myClass = new MyClass;
              $myClass->acceptParams($params['1']);
              $myClass->acceptMoreParams($params['2']);
              //.... lots more params
              return $myClass;
          }
      }
      
      class foo(){
      
         function bar()
         {
           $classInstance = MyClass::factory(param1, param2);
         }
      }
      

      【讨论】:

      • 因为该类在 bar() 中需要 4 次,除了 1、4x30 = 大量重复代码之外,大约 30 个参数都相同...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2012-03-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      相关资源
      最近更新 更多