PHP'de Private Methodları Test Etmenin Yolu: ReflectionClass
20 Jun, 2024 1 dk
PHP de bir class'ın private yada protected methoduna dışardan ulaşmak mümkün değildir. Bu sebeple bu methodları test amaçlı da olsa dışardan tetikletemiyoruz. Bunu yapmak için, ReflectionClass kullanmamız gerekiyor.
Örneğin bir User class'ımız olsun ve private fullname() methoduna sahip olsun. Öncelikle bu User class'ından bir ReflectionClass oluşturmalıyız.
$user = new User();
$reflectionClass = new ReflectionClass($user);
Artık bu ReflectionClass sayesinde methodların dışarıdan erişilebilir olmasını sağlayabiliyoruz.
Bunun için setAccessible() methodunu kullanıyoruz.
$method = $reflectionClass->getMethod('fullname');
$method->setAccessible(true);
Erişmek istediğimiz methodu ismi ile aldık ve dışarıdan erişilebilir -yani bir bakıma public- yaptık. Tabi sadece geçici olarak reflaction class üzerinden erişilebilir oldu.
Artık bu methodu çalıştırabiliriz, ancak artık elimizdeki $method nesnesini yani ReflectionMethod'u kullanacağız.
$method->invokeArgs($param1, $param2);
invokeArgs() methodu ile public yaptığımız methoda bir parametre vererek çalıştırabiliriz. Eğer parametresiz bir method ise de sadece invoke() methodunu kullanabiliriz.
$method->invoke();
Yukardaki işlemlerin tamamı bu şekilde olacaktır;
$user = new User();
$reflectionClass = new ReflectionClass($user);
$method = $reflectionClass->getMethod('fullname');
$method->setAccessible(true);
$method->invoke();