我found a question on SO以我不理解的方式使用了php“use”关键字。以下是代码段:
<?php
namespace My;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
class MyClass implements ServiceLocatorAwareInterface{
use ServiceLocatorAwareTrait;
public function doSomething(){
$sl = $this->getServiceLocator();
$logger = $sl->get( 'My\CusomLogger')
}
}
// later somewhere else
$mine = $serviceManager->get( 'My\MyClass' );
//$mine now has the serviceManager with in.
现在我尝试了没有use ServiceLocatorAwareTrait;
行的代码,但它不起作用。当您在页面顶部已经有use ServiceLocatorAwareTrait;
时,为什么必须use Zend\ServiceManager\ServiceLocatorAwareTrait;
。这是一种使用默认值或其他东西初始化接口所需方法的特殊方法吗?
答案 0 :(得分:2)
类声明之外的'use'是导入其他名称空间 - classes / interfaces。
Class声明中的一个是将Trait导入Class,因此该类可以访问trait的行为。
名称空间 - http://php.net/manual/en/language.namespaces.php 特质 - http://php.net/manual/en/language.oop5.traits.php