在类的实例化过程中,可以带或不带参数,那么构造函数将如何处理这些参数呢?为了使构造函数具有通用性,在定义构造函数时,一般不带参数,然后在其内部对参数情况进行处理。下面代码显示了一个完整的通用Person类。
<?php /** * __construct() 不需设置参数,用php内置函数自动获取 * * 在下面示例中,在构造函数里使用了内置函数func_get_args()获取到所有的参数, * func_num_args()获取到参数的数量,然后使用判断语句,执行其中一个用户自定义方法, * 从而实现了构造函数带不定参数个数的执行方法。 */ class Person{ // 定义Person类 private $name; // 定义name属性 private $name2; public function __construct() { $array=func_get_args(); //获取所有参数 $num=func_num_args(); //获取参数的数量 if(method_exists($this, $f='func'.$num)){ //重要:检查类中方法是否存在 call_user_func_array(array($this, $f), $array); // 执行一个方法与参数数组 } } public function func0() { $this->name = "没有参数时输出:唐僧"; } public function func1($value) { $this->name = $value; } public function func2($value1, $value2) { $this->name = $value1; $this->name2 = $value2; } function getName(){ return $this->name; } function getName2(){ $arr[0] = $this->name; $arr[1] = $this->name2; return $arr; } function setName($value){ $this->name = $value; } function __destruct() { print "<br>对象被销毁"; } } $person = new Person(); echo $person->getName() . "<br>"; $person2 = new Person("孙悟空"); echo $person2->getName() . "<br>"; $person3 = new Person("猪八戒", "沙和尚"); print_r($person3->getName2()); ?>
执行后的效果图: