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:使用带有类别名的扩展的主要内容,如果未能解决你的问题,请参考以下文章

CoreData - 相当于使用带有示例的类别 - Swift

带有类别的 Youtube api

如何扩展从 MySQL 导入的类别列表

如何根据类别实现带有节头的RecyclerView?

如何使用 Firebase 发送带有类别的通知 [重复]

类别,类扩展