Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类如何获得';是作为函数参数启动的吗?_Php_Class_Instantiation - Fatal编程技术网

Php 类如何获得';是作为函数参数启动的吗?

Php 类如何获得';是作为函数参数启动的吗?,php,class,instantiation,Php,Class,Instantiation,当一个函数有一个类作为参数时,您可以使用这个类而无需初始化它。有人能解释一下这个类是如何作为函数参数启动的吗?有关说明,请参见下面的代码 /** * * @param PseudoClass $class * @return void */ public function pseudoFunction(PseudoClass $class) { // access PseudoClass instance from

当一个函数有一个类作为参数时,您可以使用这个类而无需初始化它。有人能解释一下这个类是如何作为函数参数启动的吗?有关说明,请参见下面的代码

    /**
     *
     * @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();
    }

它没有实例化。这只是一个类型暗示为伪类对象的参数。必须创建伪类对象并将其传递给伪函数,此代码才能在运行时工作。

此代码仅显示方法逻辑。在现实生活中,在将类用作函数的参数之前,仍然需要实例化所使用的类

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

它被称为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的信息

为了解释这一点,我在PHP项目中使用了laravel框架。Laravel提供自动注入,因此允许此代码工作。对于Laravel,所有类都通过bind或singleton方法自动绑定。无论何时在方法中调用它们,都会有一条说明,说明如何创建该类的实例。实例位于服务容器中。您可以在此处阅读此信息: