如何扩展Zend\Db\Sql\Select?

Ric*_*ing 6 select extending-classes zend-framework2

我正在使用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"
        }
}
Run Code Online (Sandbox Code Playgroud)

Sql在查看zend文件夹之前,它会查看我的vendor文件夹中的任何名称空间内容,但是这需要我将整个zend select类复制到我的select类中 - 这是不可取的,因为我的类不会从将来的补丁中受益泽德分支.

Ben*_*min 0

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

class_alias("Your\\Namespace\\Select", "Zend\\Db\\Sql\\Select");
Run Code Online (Sandbox Code Playgroud)

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

如果您使用像BetterReflection这样的东西来动态加载和提取“Zend”选择类的代码,您可以在代码中重命名该类(可能将其缓存在某个地方,因此不需要不断执行这个公认的昂贵操作)并且从此扩展您选择的课程。将该扩展名别名为原始类名将不再是问题。

免责声明:我认识 Roave 的一些人,特别是所有在 BetterReflection 上列为作者的人。他们是正派、乐于助人的人,尽管有些脾气暴躁。