如何更改导入类使用的类的命名空间?

时间:2016-01-18 08:09:52

标签: php oop namespaces

我们假设您有以下课程

namespace App\Utility;

use App\Routing\Router;

class Url {
  public static function get(array $params){
    return Router::url($params);
  }
}

你想创建一个类,它扩展App\Utility\Url类,但只有一个区别。此类将具有相同的功能,但不会使用App\Routing\RouterAdmin\Routing\Router

这样的东西
namespace Admin\Utility;

use App\Utility\Url as BaseUrl;

class Url extends BaseUrl{
  use Admin\Routing\Router; //but this is illegal use 
}

所以结果可能是

echo App\Utility\Url::get($params); //this uses App\Routing\Router
echo Admin\Utility\Url::get($params); //this uses Admin\Routing\Router

2 个答案:

答案 0 :(得分:1)

use陈述应该是最重要的:

namespace Admin\Utility;

use App\Utility\Url as BaseUrl;
use Admin\Routing\Router;

class Url extends BaseUrl{
   public static function get(array $params){
       return Router::url($params);
   }   
}

注意,Url::get必须被覆盖,即使它看起来与BaseUrl::get完全相同。

答案 1 :(得分:1)

我认为这是继承与组合的经典案例......引用Steven Lowe

  

如果您发现您的子类正在删除由。提供的内容   超类,从超类继承的问题。

那就是说,我会使用组合并在get类中实现Admin\Utility\Url函数来使用Admin\Routing\Router类。