php - PHP 特征中的依赖注入(inject)

标签 php magento dependency-injection traits magento2

traits 真的可以和依赖注入(inject)一起工作吗?考虑以下代码:

特质等级

namespace Frame\Slick\Block;
use Frame\Slider\Slick\Block\Data as Helper

trait Slick
{
   protected $_slickHelper;
   public function __construct(Helper $slickHelper) 
   {
     $this->_slickHelper = $slickHelper;
   }
}

使用特征的类

namespace Frame\Slick\Block;

class Product ListProduct implements BlockInterface 
{
   use Slick;
   public function testTrait()
   {
      return $this->_slickHelper->getHelloWorld();
   }
}

这似乎总是返回 null,我非常确定所有内容都已正确包含。 trait 真的可以支持依赖注入(inject)吗?

最佳答案

是的,他们将 trait 中的代码“粘贴”到编译级别。考虑以下代码。它按预期工作并回显适当的值。你的问题在别处。

<?php
class Dependency
{
    public function foo()
    {
        return 'test';
    }
}

trait Slick
{
   protected $dep;

   public function __construct(Dependency $dep) 
   {
       $this->dep = $dep;
   }
}

class Product 
{
   use Slick;

   public function testTrait()
   {
      return $this->dep->foo();
   }
}

echo (new Product(new Dependency()))->testTrait();

代码将回显“测试”。 Working fiddle

关于php - PHP 特征中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877682/

相关文章:

php - mysql选择坐标错误

javascript - 如何覆盖 Prototype.js 类中声明的 javascript 函数

php - 无法读取 null 的属性 'replaceWith' - ajax 调用

dependency-injection - Autofac DI,类型不可分配给服务

php - json_encode 不适用于 PDO 获取的数据

javascript - 在 PHP 和 Ajax 中从数据库数据动态创建下拉列表

scala - 如何使用 Scala 和 Play 2.5.x 在对象中获取 application.conf 变量?

c# - 无法在 .NET Core 2.0 的启动构造函数中注入(inject)我自己的对象

php - 寻找这个循环的更优雅的解决方案

php - 过滤两个类别的产品集合 Magento 1.7