php_functions

PHP Fonksiyonları ve ReflectionFunction Sınıfı

closeBu yazı 7 yıl 16 gün önce yayınlanmış olduğundan güncelliğini yitirmiş veya içeriğindeki bilgilerin geçerliliği kaybolmuş olabilir. Herhangi bir yanlış anlaşılmadan bu site sorumlu değildir.

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;

// Önce fonksiyonu yazalım
function sayHello(string $name, $whatsup=' Naber?')
{
static $isim = 'Erdem';
echo 'Merhaba ' . $name . $whatsup;
}

Bu fonksiyon hakkında bilgi almak istersek;

$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>';

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:

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
)

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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Güvenlik Kodu * Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.