2010-08-20 65 views
1

我想停止PHP中类“OzoneRequest”和“OzoneResponse”的用户创建对象。在OzoneApplication的构造函数中只创建一个对象。我该怎么做?可能是你明白我的问题我们如何停止PHP中类的用户创建对象?

我没有用户希望对象的创建只有我创建了一个对象存在的对象。如果用户要创建的对象,那么这将无法执行......这会给出一个错误......

回答

3

做一个私有构造函数,然后从类中的一个静态方法调用它来创建你的一个对象。另外,查询单身人士的设计模式。

1

这将是一个Singleton的用例。

但是,我没有看到限制用户(阅读:开发人员)的要点,如果他不想创建请求或响应对象。即使概念上只有一个请求对象(这是有争议的;如果我需要针对远程服务分派多个请求会怎么样),问题是:为什么你禁止开发人员更改你的代码?我是一个成年人。如果我想打破你的代码,让我打破它。

还要注意的是,时下Singleton pattern is widely regarded an Anti-Pattern

+0

我尝试开发一个MVC框架我大学的专业项目,我称其为OZONE_MVC(http://code.google.com/p/ozonemvc/),在此当请求来自客户端,然后框架本身创建了一个可能必须是唯一的请求和响应对象。用户仅使用该对象。它在初始阶段..... – user421336 2010-08-20 16:46:44

+0

@user为什么他们必须是唯一的?您如何期待*用户*创建第二个请求或响应?我的意思是,*用户*无法访问您的代码。 – Gordon 2010-08-20 16:51:05

2
class OzoneRequest 
{ 
private static $instance = null; 

private function __construct() { } 

private function __clone() { } 

public static function getInstance() 
{ 
    if (!isset(self::$instance)) { 
    self::$instance = new OzoneRequest(); 
    } 
    return self::$instance; 
} 

} 

class OzoneApplication 
{ 
    protected $req; 

    public function __construct() 
    { 
    $this->req = OzoneRequest::getInstance(); 
    } 

} 
+0

由于这在技术上是一个正确的解决方案,所以我会加倍努力。道德上它是一个不同的故事;) – Gordon 2010-08-20 16:57:04

相关问题