【问题标题】:php: using extends with a class aliasphp:使用带有类别名的扩展
【发布时间】: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 { }

仍在寻找有关解决方法或扩展控制器的不同方法的其他建议。

谢谢!

【问题讨论】:

    标签: php namespaces extends aliases


    【解决方案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 的解决方案似乎更合乎逻辑,但我在整个项目中都使用了命名空间。
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多