目前我有一个名为user的类,我想用不同的变量创建,但我认为我做错了。
目前我有一个具有这两个功能的“单元”类
public function __construct($table, $id) {
require_once('database.php');
require_once('app.php');
require_once("postmark.php");
$this->table = $table;
$this->valid = true;
if(!$id) {
$this->valid = false;
}
$this->populate($id);
}
public function populate($id) {
$db = new DB();
$q = $db->where('id', $id)->get($this->table);
$resp = $q->fetchAll();
foreach ($resp as $row) {
foreach ($row as $key=>$value) {
if(!is_int($key))
$this->$key = html_entity_decode($value, ENT_QUOTES);
if(is_null($value)) {
$this->$key = null;
}
}
}
if(count($resp) <= 0) $this->valid = false;
$verdict = !$db->error;
$db = null;
unset($db);
return $verdict;
}
然后我的“用户”类就像这样扩展它
public function __construct($id, $hash = null, $verify = null, $api = null) {
if($api)
$value = $this->apiToId($api);
else if($verify)
$value = $this->verifyToId($verify);
else if($hash)
$value = $this->hashToId($hash);
else
$value = $id;
parent::__construct("users", $value);
}
但我不禁想到这在设计上很差。我过去看过的一些事情是使用&符号,可能会让我这样做
$user = new User()->fromId($id);
或者
$user = new User()->withHash($hash);
而不是传递一长串的空参数。那或我可以改善继承的工作方式。虽然我想我知道我在用PHP做什么,但我真的很想找到一些正确方向的帮助。 PHP的文档非常繁琐,我从来没有在哪里看,但总能找到很酷的有用工具。我想知道如何改善这一点以获得更大的灵活性和结构。
答案 0 :(得分:4)
alloc
确实应该是User
中定义的静态函数。底部的代码段。init
函数应声明为static并返回该类的新实例。定义类的实例以重新实例化该类只是一个坏主意。< / LI>
如果您想要实现所有这些帮助,请发布您的完整代码并对此答案发表评论。
$user = User::initWithHash($hash);
//your create method:
/**
* Creates and returns a new instance of the class. Useful
* @return an instance of User.
*/
public static function create() {
return new User();
}