Nasıl bilinmeyen argümanlarla nesneleri başlatılamıyor?

0 Cevap php

PHP'nin __call() sihirli yöntemini kullanarak denilen yöntemleri olan bir sınıf yapmaya çalışıyorum. Bu sihirli yöntem daha sonra bu gibi başka bir nesne başlatılırken olacak:

public function  __call($function, $arguments) {

    /* Only allow function beginning with 'add' */
    if ( ! preg_match('/^add/', $function) ) {
        trigger_error('Call to undefined method ' . __CLASS__ . '::' . $function, E_USER_ERROR);
    }

    $class = 'NamodgField_' . substr($function, 3); /* Ex: $function = addTextField() => $class = NamodgField_TextField */

    /* This doesn't work! Because $class is not an object yet */
    call_user_func_array( array(new $class, '__construct'), $arguments);
}

Bu kod son satırı tamamen worng olduğunu! Ben sadece ne yapmak istediğinizi açıkça yapmaya çalışıyorum.

Her çocuğun sınıf gerekli argümanlar var define olabilir Böylece, yeni bir nesne, birbiri ardına başlatırken $arguments geçmek mümkün olmak istiyorum.

I eval() kullanarak bir çözüm düşündüm, ama ben gerçekten sevmiyorum.

Herhangi bir düşünce?

0 Cevap