提问人:Richard Parnaby-King 提问时间:5/4/2017 最后编辑:CommunityRichard Parnaby-King 更新时间:5/19/2017 访问量:139
如何扩展Zend\Db\Sql\Select?
How to extend Zend\Db\Sql\Select?
问:
我正在使用MSSQL并想实现该功能(根据使用ZF2,创建一个WITH语句?为此,我正在扩展类,添加添加函数所需的属性和方法。我现在如何告诉我的应用程序使用此 Select 类而不是 Zend 类?WITH
\Zend\Db\Sql\Select
WITH
一种方法是在我的composer.json文件中指定一个:autoload
"autoload": {
"psr-4": {
"Zend\\Db\\Sql\\": "vendor/rpk/Rpk/Zend/Db/Sql"
}
}
在查找 Zend 文件夹之前,它将在我的供应商文件夹中查找任何命名空间内容,但这需要我将整个 Zend Select 类复制到我的 Select 类中 - 这是不可取的,因为我的类不会从未来的补丁中受益到 Zend 分支。Sql
答:
0赞
Benjamin
5/19/2017
#1
尝试在引导脚本中使用 class_alias(
) 指令,将替换类(带命名空间)别名为 ZF2 类的完整命名空间 -Select
Select
class_alias("Your\\Namespace\\Select", "Zend\\Db\\Sql\\Select");
不幸的是,这只是您上面给出的自动加载定义的更有针对性的版本,不幸的是,您仍然必须重新实现您的类版本以将所有当前代码包含在 Zend 类中,据我所知,没有功能从另一个类扩展一个类,然后在原始类上别名扩展类。Select
Select
如果你使用像 BetterReflection 这样的东西来动态加载和提取 'Zend' select 类的代码,你可以在代码中重命名该类(可能将其缓存在某个地方,因此不需要经常执行这个公认的昂贵操作)并从中扩展你的 select 类。将该扩展别名为原始类名将不是问题。
免责声明:我知道一些 Roave 拍品,尤其是所有在 BetterReflection 上被列为作者的人。他们是体面的,乐于助人的人,如果有点讨厌的话。
评论
Zend\Db\Sql\Sql
Zend\Db\Sql\Select
Sql
Select