特质实际上与Magento中的依赖注入一起工作吗?考虑以下代码:
特质班
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构造函数中执行di并将其分配给trait变量,然后在使用trait的类上对其进行调用,则它将始终返回null。其他都可以。
只是一个问题...“ testTrait()”返回null还是“ $ this-> _ slickHelper”为null?
—
Phoenix128_RiccardoT
$ this-> _ slickHelper返回null,在trait中的其他方法仅对分配给trait变量的di有效。
—
安德烈·费拉斯
好问题。我想,Magento使用Reflection来检查构造函数参数,并且可以很好地与以下特征配合使用:3v4l.org/jbVTU-但我将不得不仔细研究一下代码生成以进行验证。
—
Fabian Schmengler,
但是为什么要使用特征?你能举一个真实的例子吗?也许有一种更简单的解决方法
—
Marius
@Marius我创建了这个模块,用作CMS块,交叉销售,产品(特定类别)和向上销售的滑块。这些块类中的每个块类都扩展了另一个类,例如产品扩展了Magento \ Catalog \ Block \ Product \ ListProduct。确实,我使用traits的原因是因为它解决了PHP单一继承体系结构的“问题”。这样,代码重复较少。
—
安德烈·费拉兹