<?php
class
ObjectFactory
{
private
static
$objSet
=
array
();
public
function
clear()
{
self::
$objSet
=
array
();
}
public
static
function
create()
{
$argc
= func_num_args();
if
(
$argc
<= 0) {
throw
new
Exception('params error', 1);
}
$args
= func_get_args();
$class_name
=
array_shift
(
$args
);
$params
=
$args
;
if
(!
$params
) {
$class_sign
=
$class_name
;
}
else
{
$param_sign
= serialize(
$params
);
if
(
strlen
(
$param_sign
) > 100) {
$param_sign
= md5(
$param_sign
);
}
$class_sign
=
$class_name
.
'@'
.
$param_sign
;
}
if
(isset(self::
$objSet
[
$class_sign
])) {
return
self::
$objSet
[
$class_sign
];
}
$ref
=
new
ReflectionClass(
$class_name
);
if
(
$ref
->hasMethod(
'__construct'
) && !
empty
(
$params
)) {
$obj
=
$ref
->newInstanceArgs(
$params
);
}
else
{
$obj
=
$ref
->newInstance();
}
self::
$objSet
[
$class_sign
] =
$obj
;
return
$obj
;
}
}