PHP Fonksiyonları ve ReflectionFunction Sınıfı
PHP Fonksiyonları ve ReflectionFunction Sınıfı
Bugün bir form doğrulama sınıfı yazarken, karşıma şöyle bir problem çıktı: Herhangi bir fonksiyonun alabileceği parametrelerle ilgili bilgiyi kod yazarken bulabilir miyim? Biraz daha açmak istersek, bir fonksiyonu değişken üzerinden çağırırken, o fonksiyon kaç tane parametre kabul ettiğini öğrenmem ve ona göre parametreleri belirlemem gerekiyordu. Neyse ki, PHP’nin yerleşik sınıfları ve fonksiyonları artık neredeyse hiç fonksiyon sınıf yazmaya ihtiyaç kalmayacak şekilde genişledi.
PHP’nin yansıma sınıfı (Reflection Class) içerisinde yer alan ReflectionFunction Sınıfı bu iş için biçilmiş kaftan. Bu sınıf ile bir fonksiyona ait bütün özellikleri bulabiliyorsunuz. Örneğin oluşturduğumuz bir “sayHello” fonksiyonuna ait bilgileri öğrenmek için şöyle bir kod işimizi görecektir;
[syntax type=”php”]
// Önce fonksiyonu yazalım
function sayHello(string $name, $whatsup=’ Naber?’)
{
static $isim = ‘Erdem’;
echo ‘Merhaba ‘ . $name . $whatsup;
}
[/syntax]
Bu fonksiyon hakkında bilgi almak istersek;
[syntax type=”php”]
$f = new ReflectionFunction(‘sayHello’);
###########################################################
echo ‘<h3>Kullanıcı Tanımlı mı? [ isUserDefined ]</h3>’;
var_dump($f->isUserDefined());
echo ‘<br><br>’;
###########################################################
echo ‘<h3>Yerleşik Fonksiyon mu? [ isInternal ]</h3>’;
var_dump($f->isInternal());
echo ‘<br><br>’;
###########################################################
echo ‘<h3>Bu Fonskiyon kaç tane parametre kabul ediyor? [ getNumberOfParameters ]</h3>’;
echo ‘Kabul edilen parametre sayısı: ‘ . $f->getNumberOfParameters();
echo ‘<br><br>’;
###########################################################
echo ‘<h3>Bu parametrelerden kaç tanesi zorunlu? [ getNumberOfRequiredParameters ] </h3>’;
echo ‘Zorunlu parametre sayısı: ‘ . $f->getNumberOfRequiredParameters();
echo ‘<br><br>’;
###########################################################
echo ‘<h3>Kabul Ettiği Parametreler [ getParameters ]</h3>’;
foreach( $f->getParameters() as $param )
{
print $param . “<br>”;
}
echo ‘<br><br>’;
###########################################################
echo ‘<h3>Statik Değişkenleri [ getStaticVariables ]</h3>’;
echo ‘<pre>’;
print_r($f->getStaticVariables());
echo ‘</pre>’;
[/syntax]
Burada yer alan ReflectionFunction sınıfına ait fonksiyonlar bir çok ihtiyacımızı karşılayacaktır. Yukarıdaki sorgulamanın çıktısı da şöyle olacaktır:
[well]
Kullanıcı Tanımlı mı? [ isUserDefined ]
bool(true)
Yerleşik Fonksiyon mu? [ isInternal ]
bool(false)
Bu Fonskiyon kaç tane parametre kabul ediyor? [ getNumberOfParameters ]
Kabul edilen parametre sayısı: 2
Bu parametrelerden kaç tanesi zorunlu? [ getNumberOfRequiredParameters ]
Zorunlu parametre sayısı: 1
Kabul Ettiği Parametreler [ getParameters ]
Parameter #0 [ string $name ]
Parameter #1 [ $whatsup = ‘ Naber?’ ]
Statik Değişkenleri [ getStaticVariables ]
Array
(
[isim] => Erdem
)
[/well]
Görüldüğü üzere ReflectionFunction Sınıfı bir fonksiyonun karakteristiği üzerine bize detaylı bilgi verebilmektedir. İsterseniz yukarıdaki sorgulamaları yerleşik bir fonksiyon için de yapabilirsiniz. Örneğin json_decode fonksiyonu için aynı sorgulamaları yaptığımızda hangi bilgileri bize vereceğini siz de kendiniz test edebilirsiniz.
Sınıf ile ilgili detaylı bilgiyi php.net üzerinden bulabilirsiniz.