Bir işlev, şöyle bir söz dizimi kullanılarak tanımlanabilir:
Örnek 1 - İşlev kullanımını gösteren sözde kod
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Örnek işlev.\n";
return $retval;
}
?>
Bir işlevin içerisinde geçerli her tür PHP kodu kullanılabilir, buna başka işlevler ve sınıf tanımları da dahildir.
İşlev isimleri, PHP'deki diğer isimlerle aynı kurallara tabidir. Geçerli
bir işlev ismi bir harf ya da alt çizgi ile başlar, herhangi bir sayıda
geçerli harf, sayı ya da alt çizgi ile devam eder. Düzenli ifade olarak,
şu şekilde ifade edebiliriz:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
.
İşlevlerin çağrılmadan önce tanımlanmaları, aşağıdaki iki örnekte görüldüğü gibi koşullu olarak tanımlandıkları durumlar haricinde gerekmez.
Bir işlev aşağıdaki iki örnekte gösterildiği gibi koşullu olarak tanımlandıysa, bu işlev tanımının işlev çağrılmadan önce yapılması gerekmektedir.
Örnek 2 - Koşula bağlı işlevler
<?php
$makefoo = true;
/* Henüz varolmadığı için foo() buradan çağrılamaz,
ancak bar() çağrılabilir */
bar();
if ($makefoo) {
function foo()
{
echo "Uygulamanın çalışması bana erişene kadar ben yokum.\n";
}
}
/* $makefoo doğru olduğundan
artık foo() çağrılabilir */
if ($makefoo) foo();
function bar()
{
echo "Program başlatıldığı anda ben de varolurum.\n";
}
?>
Örnek 3 - İşlev içinde işlev
<?php
function foo()
{
function bar()
{
echo "foo() çağrılana kadar yokum.\n";
}
}
/* Henüz varolmadığı için
bar() çağrılamaz. */
foo();
/* Artık bar() çağrılabilir,
foo() çağrıldığında bar()
erişilebilir hale gelir */
bar();
?>
PHP'de tüm işlevler ve sınıflar betik genelinde geçerlidir - bir işlevin içinden bile tanımlanmış olsalar işlevin dışından çağrılabilirler.
PHP işlevlerin farklı değiştirgeli yeni tanımlarının yapılmasını desteklemediği gibi, işlevler yeniden tanımlanamaz veya tanımsız kılınamaz.
Bilginize: İşlev isimleri büyük-küçük harf duyarsızdır, ancak işlev isimlerini tanımlandıkları halleriyle kullanmak daha iyidir.
Değiştirge sayısı değişken işlevler desteklendiği gibi işlevlerde öntanımlı değiştirge kullanımı da desteklenmektedir. Daha ayrıntılı bilgi edinmek için func_num_args(), func_get_arg() ve func_get_args() işlevlerine de bakınız.
PHP'de işlevlerin kendilerini çağırması da mümkündür.
Örnek 4 - Kendini çağıran işlev
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
Bilginize: Kendini çağıran işlev ve yöntemler bunu 100-200 kere yaparsa yığıt taşabilir ve çalışan betiğin durdurulmasına sebep olabilir. Özellikle, kendini çağırma sayısı sonsuza giderse bu bir programlama hatası sayılır.