Reflektör


    × Bunları biliyor muydunuz?
"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__));
    }
}
encode => string '4c2fdf89b0467a77dda183f7e70b8285' ( length = 34 )
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;
    }
}
4c2fdf89b0467a77dda183f7e70b8285

Ö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;
    }
}
4c2fdf89b0467a77dda183f7e70b8285

 

 

# __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();
htdocs/develop/Internal/Database/DB/DB.php
output(Reflect::function('substr')->getParameters());
0 => object
(
        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();
2