特性是否真的与依赖注入一起工作?请考虑以下代码:
特质类

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

这似乎总是返回空值,非常确定所有内容都被正确包含。性状真能支持依赖注入吗?

最佳答案

是的,他们工作的代码是从trait“粘贴”到compliation级别的。考虑下面的代码。它按预期工作,并回声适当的价值。你的问题在别处。

<?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();

代码将回显“test”。
Working fiddle

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

10-13 04:48