我有class User
,它们对应于mySql数据库中的用户表。 基于通过调用函数传递给class public method initialize()
的数据,类初始化可以通过三种不同的方式完成。初始化意味着将用户数据保存在局部变量数组中。班级如何获得这些用户数据取决于下面提到的条件。在PHP中重载以保持类的签名相同
1. Id被提供到初始化()类的方法,该方法从基于该ID的数据库中检索用户数据,并在一个 本地阵列将其保存。
2.用户名被提供给初始化()类的方法,该方法基于该用户名 数据库中检索用户数据,并在一个本地阵列将其保存。
3. UserData数组提供给initialize()类的方法,该方法将其简单地保存在本地数组中。
的要求是,调用函数并不需要知道如何类工作,因此对于该类所有上述三种方法必须具有相同的签名(?)
让我用伪代码进一步澄清它。
请理解它是一个理想跟踪准码我想出了的我找了 给定的约束内
class User {
private $userData = array();
public function __construct(){ ... }
public function initialize ($username) {
//connect to database and fetch user details based on username.
//and populate $this->userData. example : $this->userData['id'] = $this->row->id;
}
public function initialize ($id) {
//connect to database and fetch user details based on id.
//and populate $this->userData. example : $this->userData['id'] = $this->row->id;
}
public function initialize ($data) {
//connect to database and fetch user details.
//and save $data in $this->userData. example : $this->userData = $data;
}
}
来自[PHP手册](http://php.net/manual/en/language.oop5.overloading.php):'PHP中的重载提供了动态“创建”属性和方法的方法。这些动态实体通过魔术方法进行处理,可以在类中为各种动作类型建立。 PHP对“重载”的解释不同于大多数面向对象的语言。重载传统上提供了具有相同名称但参数的数量和类型不同的多种方法的能力。' – bansi
在*语法级*上没有办法做到这一点。唯一的方法是检查'initialize'中传递的参数(例如'is_string')并做出适当的反应。 – Yoshi
@Yoshi这正是我的想法,但它提出的问题是,id和用户名都可以是相同的类型,即字符串。 – StudentX