从构造函数返回值是不是很糟糕?

Nat*_*ael 1 php oop constructor

考虑以下简单的类构造函数.(请注意,我显然不包括所有引用的方法.

// Initialize User class.
public function __construct($user_id = NULL)
{
    // If user is loaded (and a user ID is provided)
    if ($user_id)
    {
        // If user is authorized.
        if ($this->authorized($user_id))
        {
            // Load user information.
            $this->info = $this->load($user_id);
        }
        else
        {
            // Return an empty (nonexistent) user.
            return NULL;
        }
    }

    // If user is loaded (and no user ID is provided)
    else
    {
        // Create a new user.
        $new_user = create_user();

        // Return the new user's ID.
        return $new_user;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我的返回值的方法是错误的吗?我的朋友坚持认为构造函数应该总是返回一个不重要的对象.但是,我在这里展示它的方式似乎更简单,并且更容易使用.(如果我正在创建一个新用户,那么我就可以立即获得他的ID.如果我正在加载现有用户,我可以立即访问她/他的信息)

如果是错的,为什么?为什么这么糟糕?

bfa*_*tto 8

您尝试做的事情根本不起作用,构造函数返回新的实例User,即使您尝试返回null.

例如,这个:

class User {
  function __construct() {
    return null;
  }
}
var_dump(new User());
Run Code Online (Sandbox Code Playgroud)

将打印:

object(User)#1 (0) {
}
Run Code Online (Sandbox Code Playgroud)

http://codepad.org/0IdJydkY