gpt4 book ai didi

php - 可以选择自定义类,但有统一的类名

转载 作者:可可西里 更新时间:2023-11-01 13:27:15 24 4
gpt4 key购买 nike

假设您正在构建一个 Web 应用程序,该应用程序有一天将成为打包产品,用户希望能够扩展和自定义该产品。

它带有一个核心库,由包含类的 PHP 文件组成:

/library/
/library/frontend.class.php
/library/filesystem.class.php
/library/backend.class.php

现在,假设您想要保留用户无法修补的干净核心。尽管如此,您仍希望用户能够根据需要自定义每个螺母和 bolt 。

我目前的想法是创建一个自动加载机制,当一个类被实例化时,首先加载核心包括:

/library/frontend.class.php

然后,切换到user目录,查看是否有同名的include:

 /user/library/frontend.class.php

如果存在,它也会包含它。

显然,用户包含必须包含一个扩展核心包含中的定义的类定义。

现在我的问题是,如何实例化这样一个类?毕竟,我总能确定有一个定义:

class frontend_core

但我不能确定有没有

class frontend_user extends frontend_core

但是,我希望能够依赖并实例化一个类名,而不管该类是否有自定义扩展。

有没有聪明的方法、想法或模式来实现这一点?

当然,我可以编写一个简单的工厂辅助函数,首先查找 user 类,然后查找 core 类并返回一个已初始化的对象,但我会真的很想保持它尽可能干净和简单,因为正如我所说,它将成为一个包装产品。

我正在寻找使用尽可能少的代码并引入尽可能少的新功能的智能技巧或模式。

最佳答案

您为什么不遵循 Propel 使用的方法?您生成基类并已经提供了一个空的用户类(扩展基类),您的用户可以在其中放置他们的覆盖/特定实现细节,并且在您的代码中您总是引用用户类。所以基本上您只需使用您描述的逻辑的逆向。

如果上面的解释不清楚,请查看 http://propel.phpdb.org/trac/wiki/Users/Documentation/1.4/QuickStart#a6.UsingtheGeneratedSQLandOMFiles并为小型数据库生成代码。基类位于 om 文件夹中,(默认情况下为空)用户类位于根文件夹中。

关于php - 可以选择自定义类,但有统一的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com