6

我正在使用 MSSQL 并希望实现该WITH功能(根据使用 ZF2,创建 WITH 语句?)。为此,我正在扩展\Zend\Db\Sql\Select类,添加添加WITH函数所需的属性和方法。我现在如何告诉我的应用程序使用这个 Select 类而不是 Zend 类?

一种方法是autoload在我的 composer.json 文件中指定一个:

"autoload": {
        "psr-4": {
            "Zend\\Db\\Sql\\": "vendor/rpk/Rpk/Zend/Db/Sql"
        }
}

在查看 zend 文件夹之前,它将在我的供应商文件夹中查找任何Sql命名空间的东西,但这需要我将整个 zend 选择类复制到我的选择类中——这是不可取的,因为我的类不会从未来的补丁中受益Zend 分支。

4

1 回答 1

0

class_alias()尝试在引导脚本中使用指令将Select替换类(带有命名空间)别名为 ZF2Select类的完整命名空间 -

class_alias("Your\\Namespace\\Select", "Zend\\Db\\Sql\\Select");

不幸的是,这只是您在上面给出的自动加载定义的更有针对性的版本,不幸的是,您仍然需要重新实现您的Select类版本以包含 Zend 类中的所有当前代码,Select据我所知,没有功能从另一个类扩展一个类,然后将扩展类别名为原始类。

如果您使用BetterReflection 之类的东西来动态加载和提取“Zend”选择类的代码,则可以在代码中重命名该类(可能将其缓存在某处,因此这个公认的昂贵操作不需要经常执行)和从中扩展您的选择类。将该扩展名别名为您的原始类名将不成问题。

免责声明:我知道一些 Roave 作品,尤其是那些在 BetterReflection 上列为作者的作品。他们是体面的、乐于助人的人,虽然只是有点脾气暴躁。

于 2017-05-19T08:57:23.043 回答