PHP语言障碍设计问题

时间:2009-11-21 08:04:48

标签: php application-design

背景

我需要设计一组实用程序类,这些实用程序类可以简化文件系统对多种远程服务(本地,FTP,WebDAV,SVN,SSH)的访问,而我似乎无法获得“完美”的设计,主要是因为语言障碍 - 我觉得我选择的每个设计路径都被删除了,因为PHP没有支持特定的功能。

我发现这令人沮丧,而且我没有想法。

要求

每个其他文件系统类型继承的FileSystem的基本抽象类或接口。 FileSystem类(及其子类)是实现基本FS操作的“驱动程序”,例如“移动”,“删除”,“创建”等。

不应将这些驱动程序操作暴露给类用户,而FileSystem也是一个根据请求提取文件信息记录的工厂。

文件也基于抽象类或接口FileDirectoryFileSystem子类的实现者可能是也可能不是子类。 FileSystem班级的用户不关心File的类型(SshFileSvnFile应该相同)。

File(和Directory)类应该与以某种方式创建它的文件系统驱动程序通信,而用户无法通过{{1}手动执行此类司机。

我尝试了什么

当然,我将FileSystem作为一个抽象类,然后继续编写类FileSystem,并证明PHP没有File支持,因此friend无法访问File受保护的驱动程序方法。

另一个被刮掉的想法是类中的一个类 - FileSystemFileSystem - PHP没有嵌套类。

FileSystem::File划分为FileSystemFileSystemDriver,但这会让我陷入同样的​​原始问题。

300赏金奖励中的声望点

对于PHP缺乏封装所需的编程实用程序的原始想法的解决方案。

2 个答案:

答案 0 :(得分:0)

为什么不能将FileSystemDriver与FileSystem分开?例如:

class SSHFileSystem {   
    private $driver = new SSHDriver();

    function getFile($path)
    {
        return new SSHFile($this->driver, $path);
    }
}

答案 1 :(得分:0)

文档问题,而不是代码问题。

将FileSystem的方法保留为公共方法,但记录它们只应由内部文件和目录对象使用。

这在语言中很常见。 Python有魔术方法,或_function表示法等。

如果我是一名用户,我不会只看所有可用的方法并开始使用它,如果它听起来很有趣,我会阅读文档并按照他们的意思行事。