Volanie užívateľských funkcií

Na volanie funkcie z internej funkcie by ste mali použir funkciu call_user_function( ) .

call_user_function( ) vracia SUCCESS pri úspechu a FAILURE v prípade , že sa funkcia nedá nájsť . Mali by ste si vrátenú hodnotu overiť ! Ak vráti SUCCESS , ste zodpovedný za zničenie retval pval sami ( alebo vráti ju ako vrátenú hodnotu funkcie ) . Ak vráti FAILURE , nie je hodnota retval definovaná a nesmiete sa jej dotknúť .

Všetky interné funkcie , ktoré volajú užívateľské funkcie musia Všetky interné funkcie , ktoré volajú užívateľské funkcie musia byť znovu zavedené . Medzi iným to znamená , že nesmú používať globálne ani statické premenné .

call_user_function( ) šesť argumentov :

HashTable *function_table

Toto je hash tabuľka , v ktorej sa funkcia hľadať .

pval *object

Toto je ukazovateľ na objekt , na ktorý by sa mala funkcia vyvolať . Mal by byť NULL ak sa volá globálna funkcia . Ak nie je NULL ( t.j . ukazuje na objekt ) , argument function_table sa ignoruje , a namiesto toho sa berie z hashu objektu . Objekt sa *môže* modifikovať funkciou , ktorá je naň vyvolaná ( funkcia bude mať k nemu prístup cez $this ) . Ak , pre nejaký dôvod , nechcete , aby sa tak stalo , namiesto too pošlite kópiu objektu .

pval *function_name

Názov funkcie , ktorá sa volať . pval musí byť typu IS_STRING s function_name.str.val a function_name.str.len nastavenými na príslušné hodnoty . function_name je modifikovaný call_user_function( ) - je prekonvertovaný na lowercase . Ak chcete prípad zachovať , namiesto toho pošlite kópiu názvu funkcie .

pval *retval

Ukazovateľ na štruktúru pval , do ktorej sa vrátená hodnota vyvolanej funkcie uloží . Štruktúra musí byť predtým vyhradená - call_user_function( ) ju sama NEVYHEADÍ .

int param_count

Počet parametrov predávaných funkcii .

pval *params[ ]

Pole ukazovateľov na hodnoty , ktoré sa predávajú ako argumenty funkcií , prvý argument je v offsete 0 , druhý v offsete 1 , atď . Pole je pole ukazovateľov na pval ; Ukazovatele sa pošlú ako keby funkcii , čo znamená , že ak funkcia modifikuje svoje argumenty , pôvodné hodnoty sa zmenia (predávanie odkazmi ) . Ak nechcete také správanie , namiesto toho predajte kópiu .