我有__construct($parameter)
public function __construct($nick) {
$query = "SELECT * FROM Users WHERE nick='".$nick."'";
$result = App::runQuery($query);
$user = $result->fetch_object();
$this->id = $user->id;
$this->nick = $user->nick;
$this->email = $user->email;
$this->password = $user->password;
$this->birthDay = $user->birthDay;
$this->sex = $user->sex;
$this->about = $user->about;
$this->city = $user->city;
$this->photo = $user->photo;
$this->following = $user->following;
$this->followers = $user->followers;
$this->statu = $user->statu;
}
现在我想要一个没有参数的默认构造函数:
public function __construct() {
$this->id = NULL;
$this->nick = NULL;
$this->email = NULL;
$this->password = NULL;
$this->birthDay = NULL;
$this->sex = NULL;
$this->about = NULL;
$this->city = NULL;
$this->photo = NULL;
$this->following = NULL;
$this->followers = NULL;
$this->statu = NULL;
}
但有些地方出了问题,我得到了这样的错误:
Fatal error: Cannot redeclare User::__construct() in /Applications/MAMP/htdocs/xxx/Application/User.php on line 33
如何同时拥有两个带参数和不带参数的构造函数?
-
PHP中没有重载;不能有名称相同但参数不同的方法
-
由于您的所有属性都将默认为null,因此没有理由自己这样做。我建议做以下事情:
public function __construct($nick = null) { if ($nick != null) { $query = "SELECT * FROM Users WHERE nick='".$nick."'"; $result = App::runQuery($query); $user = $result->fetch_object(); $this->id = $user->id; $this->nick = $user->nick; $this->email = $user->email; $this->password = $user->password; $this->birthDay = $user->birthDay; $this->sex = $user->sex; $this->about = $user->about; $this->city = $user->city; $this->photo = $user->photo; $this->following = $user->following; $this->followers = $user->followers; $this->statu = $user->statu; } }
-
上面代码的一个替代方案是拥有多个静态构造函数方法,并使用一个私有构造函数:
private function __construct() { } public static function createFromNick($nick) { $self = new self(); $query = "SELECT * FROM Users WHERE nick='".$nick."'"; $result = App::runQuery($query); $user = $result->fetch_object(); $self->id = $user->id; $self->nick = $user->nick; $self->email = $user->email; $self->password = $user->password; $self->birthDay = $user->birthDay; $self->sex = $user->sex; $self->about = $user->about; $self->city = $user->city; $self->photo = $user->photo; $self->following = $user->following; $self->followers = $user->followers; $self->statu = $user->statu; return $self; } public static function createEmpty() { return new self(); }
public function __construct() {
// allocate your stuff
}
public static function withRow( array $row ) {
$instance = new self();
$instance->fill( $row );
return $instance;
}
protected function fill( array $row ) {
// fill all properties from array
}
有关详细信息,请查看以下答案:在PHP 中执行多个构造函数的最佳方法
非常感谢您的回答。我已经用自己的方法解决了这个问题。
public function __construct($nick) {
if($nick != NULL) {//for user
$query = "SELECT * FROM Users WHERE nick='".$nick."'";
$result = App::runQuery($query);
$user = $result->fetch_object();
$this->id = $user->id;
$this->nick = $user->nick;
$this->email = $user->email;
$this->password = $user->password;
$this->birthDay = $user->birthDay;
$this->sex = $user->sex;
$this->about = $user->about;
$this->city = $user->city;
$this->photo = $user->photo;
$this->following = $user->following;
$this->followers = $user->followers;
$this->statu = $user->statu;
}else {//for null
$this->id = NULL;
$this->nick = NULL;
$this->email = NULL;
$this->password = NULL;
$this->birthDay = NULL;
$this->sex = NULL;
$this->about = NULL;
$this->city = NULL;
$this->photo = NULL;
$this->following = NULL;
$this->followers = NULL;
$this->statu = NULL;
}
}
它有效!