我有__construct($参数)
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;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要一个没有这样参数的默认构造函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
但有些事情是错误的,我得到这样的错误:
Fatal error: Cannot redeclare User::__construct() in /Applications/MAMP/htdocs/xxx/Application/User.php on line 33
Run Code Online (Sandbox Code Playgroud)
如何让两个带参数且没有参数的构造函数同时出现?
Tim*_*per 16
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;
}
}
Run Code Online (Sandbox Code Playgroud)上面代码的替代方法是使用多个静态构造函数方法,并使用私有构造函数:
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();
}
Run Code Online (Sandbox Code Playgroud)Meh*_*met -11
非常感谢您的回答。我已经用我的方法解决了这个问题。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
有用!