这是Employee.class.php
class Employee
{
public $first_name;
public $last_name;
public $date_of_birth;
public function __construct($fn, $ln, $dob)
{
$this->first_name = $fn;
$this->last_name = $ln;
$this->date_of_birth = $dob;
}
public function registerEmployee()
{
require '../config.php';
$stmt = $dbh->prepare("INSERT INTO emp_reg(e_name,
e_lname,
e_dob) VALUES(?,?,?)");
$stmt->execute(array($this->first_name,
$this->last_name,
$this->date_of_birth));
echo "Saved Successfully";
}
public function return_employee_data($employee_id)
{
require '../config.php';
$stmt = $dbh->query("SELECT * FROM emp_reg WHERE e_id = '$employee_id'");
$arr = $stmt->fetchall(PDO::FETCH_ASSOC);
$res = json_encode($arr);
echo $res;
}
}
当我要在其他文件中要求此课程时,只需要xyz.php
return_employee_data($employee_id);
我要在该文件中创建一个对象,如
// constructor overloading is not possible so I can't create `$EmployeeObject` like this.
$EmployeeObject = new Employee();
因此我无法像这样运行此功能return_employee_data($employee_name);
$EmployeeObject->return_employee_data($employee_name); //not possible in this new file
如果构造函数重载不可能,那么如何创建具有给定参数的对象,并且没有任何参数?我还想在其他文件中创建具有可变参数的对象,其中我们只包含类定义,文件数据不提供数据或可变数据来创建上述定义的对象?
如果我们无法创建对象,我如何调用其底层函数来解决任何特定问题?
答案 0 :(得分:2)
PHP不支持构造函数重载。理解并使用重载的构造函数,这有点破解。您可以使用func_get_args()来检索和检查传递的参数,并使用匹配的参数调用自定义重载的__construct函数。
class Construct{
function __construct() {
$a = func_get_args(); // get constructor parameters
$i = func_num_args(); // count(func_get_args())
if (method_exists($this,$f='__construct'.$i)) {
/*
* Call to the overloaded __construct function
*/
call_user_func_array(array($this,$f),$a);
}
}
function __construct1($a1) {
echo('__construct with 1 param called: '.$a1);
}
function __construct2($a1,$a2) {
echo('__construct with 2 params called: '.$a1.','.$a2);
}
function __construct3($a1,$a2,$a3) {
echo('__construct with 3 params called: '.$a1.','.$a2.','.$a3);
}
}
$obj = new Construct('one'); // Prints __construct with 1 param
$obj2 = new Construct('one','two'); // Prints __construct with 2 params
$obj3 = new Construct('one','two','three'); // Prints __construct with 3 params
答案 1 :(得分:0)
答案 2 :(得分:0)
首先,你的回答有多个问题。
a)为了让您能够以多种形式拥有“构造函数”(但仍然有限),请参阅以下示例;
class Foo{
public $dmg;
public $speed;
public function __construct($dmg = '2', $speed = '3'){
$this->dmg = $dmg;
$this->speed = $speed;
}
}
$a = new Foo();
echo $a->speed."\n"; //3
$a = new Foo(6,6);
echo $a->speed."\n"; //6
b)你的函数return_employee_data
不依赖于类中的任何内部,这种方式如果你想在外面使用它你可以使它静态(在定义前面写) static)所以你可以在你用这个类包含库的任何地方将它用作Employee::return_employee_data($id);
答案 3 :(得分:0)
PHP确实不支持重载,而是让您能够为方法提供可选参数。您可以手动扩展构造函数以包含多种类型的构造函数,如下所示:
public function __construct($fn = null, $ln = null, $dob = null)
{
if($fn === null && $ln === null && $dob === null ) {
$this->constructNothing();
}
else {
$this->constructFull($fn,$ln,$dob);
}
}
private function constructFull( $fn, $ln, $dob ) {
$this->first_name = $fn;
$this->last_name = $ln;
$this->date_of_birth = $dob;
}
private function constructNothing() {
// whatever you need goes here
}
现在你可以调用new Employee()
并从中获取一个特殊的构造函数。
(顺便说一句,如果你调用一个参数太少的函数,PHP就不会抱怨;它只会传递null
所有这些函数。所以如果你的新构造函数什么也不做,那就等了。现在就像你一样工作,因为它只会为每个属性分配null,无论如何都是默认值)