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
tú
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(
)
má
šesť
argumentov
:
HashTable
*function_table
Toto
je
hash
tabuľka
,
v
ktorej
sa
funkcia
má
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á
(
tá
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
má
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
.