Sarıcı işlevi sınıf yapıcısı parametreleri geçirerek

0 Cevap php

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ı?

0 Cevap