Reflektör
"Dinamik bir kütüphaneyi tanımlarken sınıf isminin başına Internal ön eki getirirerek statik erişimli hale getirebilirsiniz. "
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. ZN Framework'te ReflectionX kütüphanelerini belli bir standart içinde kullanılabilir hale getirmiştir.
# Kurulum
ZN dağıtımları için kurulum gerekmez.
↓ composer require znframework/package-helpers
# 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.
*@param3
dizge : Standart dizge de kullanılabilir.
*/
Kullanımlar
<?php 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
<?php 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.
<?php 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();