Reflektör
Sınıflar, arayüzler, işlevler, yöntemler ve hatta eklentiler üzerinde "tersine mühendislik" yapabilmeyi sağlayan eksiksiz bir yansıtma arayüzüdür. Buna ek olarak, yansıtma arayüzü, işlevler,…
This article is currently available in Turkish. Its English translation is being prepared.
Sınıflar, arayüzler, işlevler, yöntemler ve hatta eklentiler üzerinde "tersine mühendislik" yapabilmeyi sağlayan eksiksiz bir yansıtma arayüzüdür. Buna ek olarak, yansıtma arayüzü, işlevler, sınıflar ve yöntemler için belgeleme açıklamalarının elde edilmesini sağlayan yollar içerir. KUT Framework'te ReflectionX kütüphanelerini belli bir standart içinde kullanılabilir hale getirmiştir.
Kurulum
Bu bileşen KUT ile birlikte gelir; ayrıca kurulum gerektirmez.
↓ Paket KUT ile birlikte gelir.
Yöntemler
| Reflect::annotation(string $class, string $function = [[NULL]]) : object |
| Reflect::__call() : ReflectionX |
# Annotation
İlgili sınıf ve yöntemlerine yönelik tanımlanan açıklama satırlarını okumak ve kontrol etmek için oluşturulmuştur. Açıklama satırları aşağıdaki örnekte kullanılan standartta olmalıdır. Her bir @param gibi başlayan ifadeler eşsiz olmalıdır.
Parametreler
| string | $class | Açıklama satırı kontrol edilecek sınıf adı veya sınıf::yöntem adı. |
| string |
$function = NULL |
İlgili sınıfın yöntem adı. 1. parametre her iki bilgiyi içerecek şekilde kullanılmışsa bu parametrenin kullanımına gerek yoktur. |
| return | object | |
Kurallar
Yorum satırları aşağıdaki standartlara göre yazılmalıdır.
/**
*@param1:phpcode() : PHP kodu çalıştırılacaksa kodun önüne : sembolü getirilir.
*@param2{'key':'value'}: Json deyimi objeye çevrilir.
*@param3dizge : Standart dizge de kullanılabilir.
*/
Kullanımlar
namespace Project\Controllers;
use Reflect;
/**
* @encode :Encode::super(1)
* @test :DB::test()->result()
* @jsonArray [0,5,6]
* @json {"test":"deneme"}
* @array :['a' => 5]
*/
class Home extends Controller
{
public function main(string $params = NULL)
{
output(Reflect::annotation(__CLASS__));
}
}
test => object
(
0 => object
(
id => string '1' ( length = 3 )
name => string 'ozan' ( length = 6 )
)
1 => object
(
id => string '2' ( length = 3 )
name => string 'haluk' ( length = 7 )
)
)
jsonArray => object
(
0 => integer 0 ( length = 1 )
1 => integer 5 ( length = 1 )
2 => integer 6 ( length = 1 )
)
json => object
(
test => string 'deneme' ( length = 8 )
)
array => object
(
a => integer 5 ( length = 1 )
)
Yöntemlerde Kullanım
namespace Project\Controllers;
use Reflect;
class Home extends Controller
{
/**
* @encode :Encode::super(1)
* @test :DB::test()->result()
*/
public function test(){}
public function main(string $params = NULL)
{
$annotation = Reflect::annotation(__CLASS__, 'test');
echo $annotation->encode;
}
}
Özelliklerde/Değişkenlerde Kullanım
Değişkenlerin açıklama satırlarını yakalamak için 2. parametre $degisken olarak ifade edilir.
namespace Project\Controllers;
use Reflect;
class Home extends Controller
{
/**
* @encode :Encode::super(1)
* @test :DB::test()->result()
*/
public $test;
public function main(string $params = NULL)
{
$annotation = Reflect::annotation(__CLASS__, '$test');
echo $annotation->encode;
}
}
# __Call
Call sihirli yöntemi ReflectionX sınıflarının isimlerini kullanarak ilgili reflection sınıfını çağırmayı sağlar.
| X Sınıfları | |
| NULL | Reflection |
| class | ReflectionClass |
| extension | ReflectionExtension |
| function | ReflectionFunction |
| method | ReflectionMethod |
| object | ReflectionObject |
| parameter | ReflectionParameter |
| property | ReflectionProperty |
Parametreler
| mixed ...$className | Sıralı parametreler. |
| return ReflectionX | |
Kullanımlar
echo Reflect::class('DB')->getFileName();
output(Reflect::function('substr')->getParameters());
(
name => string 'str' ( length = 5 )
)
1 => object
(
name => string 'start' ( length = 7 )
)
2 => object
(
name => string 'length' ( length = 8 )
)
echo Reflect::parameter('substr', 'length')->getPosition();
Güvenli annotation değerleri
Reflect::annotation(), iki nokta ile başlayan annotation değerlerini çalıştırılabilir PHP olarak değerlendirmez. String, integer, float, boolean, null ve iç içe diziler güvenli bir literal ayrıştırıcıyla okunur.
/**
* @options :["cache" => true, "limit" => 25]
*/
Fonksiyon çağrıları, değişkenler, sabitler ve çalıştırılabilir ifadeler reddedilir. Böylece annotation API’sinin veri taşıma yeteneği korunurken açıklama içinden kod yürütülmez.