2009-10-29 23 views
3
public function __construct($input = null) { 
    if (empty($input)){ 
     return false; 
    } 

,然后有一些构造函数代码...PHP构造

什么,我想要做的是,如果我传递一个空的变量

$ = ClassInstance的新MyClass的类别不初始化( ); 我想$ classinstance是空的(或false)

我认为这是不可能的这样,什么是一种简单的方法来实现类似的结果?

回答

5

你可以使私有的正常构造函数(所以它不能从对象外部使用,就像你制作一个Singleton一样)并创建一个Factory Method

class MyClass { 
    private function __construct($input) { 
     // do normal stuff here 
    } 
    public static function factory($input = null) { 
     if (empty($input)){ 
      return null; 
     } else { 
      return new MyClass($input); 
     } 
    } 
} 

然后你会实例化一个类是这样的:

$myClass = MyClass::factory($theInput); 

(编辑:现在假设你只是想支持PHP5)

+1

良好的补充说明。 – jheddings 2009-10-29 23:08:33

+0

赞成赞成:) – philfreo 2009-10-29 23:15:59

+0

我仍然需要__construct? – Daniel 2009-10-29 23:33:44

1

你可以使用一个工厂方法来创建对象:

private function __construct($input = null) { 
} 

public static function create($input = null) { 
    if (empty($input)) { 
     return false; 
    } 
    return new MyObject($input); 
}  
+0

我打败了你3秒:) – philfreo 2009-10-29 23:06:06

+0

伟大的思想...... :) – jheddings 2009-10-29 23:08:02

+1

我相信你的创建方法应该是一个静态方法,就像我的解决方案。 – philfreo 2009-10-29 23:08:27

0

我相信你是正确的。新对象的print_r将显示它返回一个对象。

你可以让它抛出一个异常,但这不可能是你想要的风格。

已发布工厂方法+1。这些工厂方法也可能是这样:

public static function newCreate($a) { return (!$a) ? false : new foo($a); } 

我喜欢工厂方法:-)