2012-08-03 7 views
0

J'essaie maintenant de créer une extension php personnalisée et un problème auquel je fais face est que je ne sais pas comment appeler une méthode parente.zend moteur appeler la méthode parente

Il est d'être dans le constructeur de classe et appeler le constructeur du parent:

zval *object, 
    fname; 

object = getThis(); 
ZVAL_STRING(&fname, "parent::__construct", 0); 

if(SUCCESS != call_user_function_ex(NULL, &object, &fname, NULL, 0, NULL, 1, NULL TSRMLS_CC)) 
{ 
    RETURN_NULL(); 
} 

Comment faire correctement?

Répondre

1

Vous ne devez pas appeler explicitement le constructeur du parent si tout ce qu'il fait est d'initialiser certaines des propriétés des objets. Si vous le faites, vous finirez avec des choses désagréables comme des comptes de référence erronés et des memleaks. Pour un exemple, regardez comment ASTTree extends ASTNodeList. La partie clé est zend_object_handlers, par exemple create_object_tree. Il y a où vous devriez faire ces choses.

Si vous souhaitez voir comment appeler les méthodes d'autres objets, commencez à suivre les liens des macros de commodité dans meta_parser.h. obj_call_method_internal_ex() est vraiment réutilisable. (J'ai mis beaucoup d'efforts pour les rendre ainsi)

Questions connexes