background image

$u

 = 

new

 User(‘

小明 ,19,‘

学生 );

当然我们也可以通过在__construct 函数中进行默认值设置来避免这种重复劳动,但事实
上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可以通过一个标识来对应
一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,
我们在调用 User 类的时候就会变的轻松许多,即便是需要增减参数属性也不需要到处进
行代码的替换,下面就是一个工厂类(也可以直接将方法存放在 User 类)
代码如下:
 

interface

 IUser{

function

 getName();

function

 getAge();

}

class

 User 

implements

 IUser{

protected

 

$_group

;

protected

 

$_name

;

protected

 

$_age

;

function

 __construct(

$name

$age

$group

){

$this

->_group = 

$group

;

$this

->_name = 

$name

;

$this

->_age = (int)

$age

;

}

function

 getName(){

return

 

$this

->_name;

}

function

 getAge(){

return

 

$this

->_age;

}
}

class

 Fuser{

private

 

static

 

$group

 = 

array

(

array

(‘

小明 ,19,‘

学生 ),

array

(‘

小王 ,19,‘

学生 )

);

static

 

function

 create(

$id

){

list(

$name

$age

$group

) = self::

$group

[(int)

$id

];

return

 

new

 User(

$name

$age

$group

);

}
}

echo

 Fuser::create(0)->getName();