【问题标题】:How does a class get's initiated as a function argument?一个类如何作为函数参数启动?
【发布时间】:2020-05-10 08:38:00
【问题描述】:

当一个函数有一个类作为参数时,你可以使用这个类而不用初始化它。有人可以解释这个类是如何作为函数参数启动的吗?请参阅下面的代码进行说明。

    /**
     *
     * @param PseudoClass $class
     * @return void
     */
    public function pseudoFunction(PseudoClass $class)
    {
        // access PseudoClass instance from function argument
        $class->exampleFunction();

        // instead of manually creating a new instance of the PseudoClass
        new PseudoClass();

        $class->exampleFunction();
    }

【问题讨论】:

    标签: php class instantiation


    【解决方案1】:

    代码仅显示方法逻辑。在现实生活中,您仍然需要先实例化您使用的类,然后才能将其用作函数的参数。

    一些框架使用自动注入,但它们仍然在后台被实例化。

    【讨论】:

    • 这就解释了,我在我的 PHP 项目中使用 laravel 框架。 Laravel 提供自动注入,因此允许此代码工作。
    • 在 laravel 的情况下,所有的类都通过 bind 或单例方法自动绑定。每当您在方法中调用它们时,都会有一条说明如何创建该类的实例。该实例位于服务容器中。您可以在此处阅读此信息:laravel.com/docs/7.x/container#automatic-injection
    【解决方案2】:

    它没有被实例化。这只是一个已被键入提示为 PseudoClass 对象的参数。必须创建一个 PseudoClass 对象并将其传递给 pseudoFunction,此代码才能在运行时工作。

    【讨论】:

      【解决方案3】:

      它被称为DI(依赖注入)。在面向对象编程中,我们使用这种模式,但取决于您遵循的设计。

      依赖注入是一种由一个对象提供 另一个对象的依赖关系。

      用例示例:

      <?php
      
          class Skills {
      
              public function Web(){
                  return 'Web Developer';    
              }
      
              public function Api(){
                  return 'API Developer';
              }            
      
          }
      
      
         class Programmer {
      
            public function skill(Skills $skills){
               echo $skills->Api();
            }
      
         }
      
         // Instantiate Skills class to be used for DI.
         $skills = new Skills();
         $p = new Programmer();
         // DI occurs here.
         $p->skill($skills);
      ?>
      

      了解更多关于 DI here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-23
        • 2021-04-20
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        相关资源
        最近更新 更多