php:使用带有类别名的扩展
Posted
技术标签:
【中文标题】php:使用带有类别名的扩展【英文标题】:php: using extends with a class alias 【发布时间】:2013-11-25 11:26:22 【问题描述】:我在两个不同的命名空间中有类,例如:
控制器在 \Core 中, 索引在 \Public
在我的 index.php 中,我有一个用于所有 \Core 类的 class_alias,因此您可以直接调用它们:$controller = new Controller();
。这没有问题。
我的问题是当我尝试扩展课程时。由于 Index & Controller 位于不同的命名空间中,它会尝试在 \Public 命名空间中查找 Controller,因此这不起作用:
<?php
namespace Panel\Pub;
class Index extends Controller
有什么办法可以解决这个问题,以便我可以在扩展函数中使用类别名?我知道我可以使用 \Core\Controller 并且它会工作,但我正在尝试使用别名来使核心功能更易于访问。
编辑:找到一种解决方法 在进行了更多测试之后,我发现在扩展中的别名前面使用 \ 似乎有效。不如 no 理想,但目前最好的解决方案是:
class Index extends \Controller
仍在寻找有关解决方法或扩展控制器的不同方法的其他建议。
谢谢!
【问题讨论】:
【参考方案1】:当您使用命名空间时,您会使用命名空间中的完整路径
class Index extends \Public\Controller
\
代表命名空间的根。
另一种方法是使用use
关键字
namespace Panel\Pub;
use \Public\Controller as Controller
class Index extends Controller
【讨论】:
是的,它会是 \Core\Controller 但我想看看是否有办法使用我为 Controller 设置的别名来避免使用 use/fully qualified 方法。 是的,我也知道使用方法。我希望我不必在扩展核心类的所有脚本中复制它或 \Core\。 class_alias 在索引中设置。类别名允许您通过别名调用类,我将别名设置为从 \Core\Controller 到 Controller。但是,当我尝试扩展 Controller 时,此别名不可用,仅当我直接调用该类时。我正在寻找是否有办法将别名应用于扩展。我知道标准方法。 我不确定我是否理解。您想扩展由Index
扩展的Controller
?
我猜你可以这样看。设置了 Class_alias,以便主脚本识别 Controller,而不仅仅是 \Core\Controller,这类似于您提供的 'use as' 方法。主脚本调用扩展 Controller 的 \Public\Index 类。虽然主脚本只能调用 Controller,但 \Public\Index 不能而且必须调用 \Core\Controller。 PHP 可能没有解决这个问题的方法,我正在寻找一个。找到一个不必每次都调用 \Core 的解决方案似乎更合乎逻辑,但我在整个项目中都使用了命名空间。以上是关于php:使用带有类别名的扩展的主要内容,如果未能解决你的问题,请参考以下文章