gpt4 book ai didi

PHP 为 SDK 使用工厂模式

转载 作者:可可西里 更新时间:2023-10-31 22:53:18 24 4
gpt4 key购买 nike

我在这里有点迷茫,因为我想做一些在 Java 中非常简单但在 PHP 中似乎有点复杂的事情。

我们正在为我们的产品和 Java 构建一个 SDK,我们有一个不能(!)由用户(即编码器)实例化的类,因为它的完整性有几个限制。所以我们将其构建为“XFactory”内部的嵌套类“X”,您将通过调用 XFactory.buildMeMyX(); 获得 X 的实例; - 简单...

现在 PHP 根本不支持嵌套类,我想知道如何在这里应用它。在 Java 中,X 的构造函数是隐藏的(私有(private)的),因此只有 XFactory 可以调用它。

在 PHP 中,看起来我必须公开 __construct() 并将嵌套类 X 移出 XFactory。因此,用户将能够在没有工厂的情况下创建实例。

现在 - 我可以将工厂功能移动到 X 本身并将所有内容移动到那里,但这会破坏 SDK 的设计。到底有没有一种有用的方法可以在 PHP 中执行此类操作?

最佳答案

对于 PHP 5.x,您已经描述了您的选择,根本没有私有(private)/ protected 类或内部类,因此没有进一步的方法来限制实例化。

但是,在 PHP 7 中,这将发生变化。

仍然没有嵌套类(尽管我们将来可能会得到它们,请参阅:https://stackoverflow.com/a/31454435/664108),但您可以实例化一个 anonymous class并且只向消费者提供这样的界面:

class XFactory
{
public function buildMeMyX()
{
return new class() implements XInterface {
public function doWhatEverAnXCanDo()
{
// X X X
}
// ...
};
}
}
interface XInterface
{
function doWhatEverAnXCanDo();
}

关于PHP 为 SDK 使用工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519872/

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