【发布时间】:2011-10-25 04:06:58
【问题描述】:
我知道扩展同名的类是不可能的,但我很好奇是否有人知道加载类然后重命名它的方法,所以我以后可以用原始名称扩展它。希望喜欢以下内容:
<?php
//function to load and rename Class1 to Class2: does something like this exist?
load_and_rename_class('Class1', 'Class2');
//now i can extend the renamed class and use the original name:
class Class1 extends Class2{
}
?>
编辑: 好吧,我知道在有大型类文件库的基本 OOP 环境中,这将是一种糟糕的做法。但是我使用的是 CakePHP MVC 框架,能够以这种方式扩展插件类非常有意义,因为该框架遵循一个完善的命名约定(模型名称、视图名称、控制器名称、url 路由(http:// /site.com/users)等)。
到目前为止,要扩展 CakePHP 插件(例如:Users 插件),您必须通过添加前缀(如 AppUsers)来扩展所有具有不同名称的模型、视图和控制器类,然后再进行一些编码以重命名变量名称,然后您必须对重命名的 url 路由等进行编码,以最终回到“用户”名称约定。
由于 MVC 框架代码组织良好,如果能够实现上述内容,则代码中很容易理解。
【问题讨论】:
-
真的永远不要再想这样的事情!它违反了几乎所有的好习惯
-
尽管我并没有真正理解您的要求,但我可以说这听起来是个坏主意,源于对相关技术的一些根本误解。
-
@markus:简而言之,他想用一个新的类替换一个现有的类,它应该扩展前一个类。坏主意,是的。
-
你为什么不重命名这个类呢?
class BaseClass_Extended extends BaseClass? -
我不想对 Cake 说任何话。我不想说太多,因此简短地说:“并且可能值得取代正统的 OOP 基础” 问题是,Cake 是建立在这个“正统的 PHP 基础”之上的。我向你保证,你迟早会破坏你的应用程序,即使考虑到这样的黑客攻击。