我们假设您有以下课程
namespace App\Utility;
use App\Routing\Router;
class Url {
public static function get(array $params){
return Router::url($params);
}
}
你想创建一个类,它扩展App\Utility\Url
类,但只有一个区别。此类将具有相同的功能,但不会使用App\Routing\Router
但Admin\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
答案 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
类。