Here is the deal. I'm trying to make a function which returns an object. Something like this:
function getObject( $objectName ) {
return new $objectName() ;
}
Ama yine sınıf yapıcısı params geçmesi gerekiyor, en kolay çözüm bu gibi işlevi bir dizi için geçen olurdu:
function getObject( $objectName, $arr = array() ) {
return new $objectName( $arr ) ;
}
But then i need the class constructor had only 1 argument and exactly array, which is undesired, cause i want to be able to use this function for any class. Here is the solution i came to:
/**
* Test class
*/
class Class1 {
/**
* Class constructor just to check if the function below works
*/
public function __construct( $foo, $bar ) {
echo $foo . ' _ ' . $bar ;
}
}
/**
* This function retrns a class $className object, all that goes after first argument passes to the object class constructor as params
* @param String $className - class name
* @return Object - desired object
*/
function loadClass( $className ) {
$vars = func_get_args() ; // get arguments
unset( $vars[ 0 ] ) ; // unset first arg, which is $className
// << Anonymous function code start >>
$code = 'return new ' . $className . '(' ;
$auxCode = array() ;
foreach( $vars as $val )
$auxCode[] = 'unserialize( stripslashes(\''
. addslashes( ( serialize( $val ) ) ) . '\' ) )' ;
$code .= implode( ',', $auxCode ) . ');' ;
// << Anonymous function code end >>
$returnClass = create_function( '', $code ) ; // create the anonymous func
return $returnClass( $vars ) ; // return object
}
$obj = loadClass( 'Class1', 'l\'ol', 'fun' ) ; // test
Peki, bu i istediğiniz gibi çalışır, ama benim için biraz hantal görünüyor. Belki tekerleği yeniden icat ediyorum ve bu tür sorun için başka bir standart çözüm ya da bir şey var mı?