Yansıtma Sınıflarının Genişletilmesi

Yerleşik sınıfların özelleştirilmiş sürümlerini oluşturmak istediğiniz takdirde (yöntemler yerine üye değişkenlere kolayca erişmek veya aracı yöntemlere sahip olmak ya da renkli HTML sürümünü oluşturmak istiyorsunuz diyelim), baştan sona hepsini genişletebilirsiniz.

Örnek 1 - Yerleşik sınıfların genişletilmesi

<?php
/**
* Kendi Reflection_Method sınıfımız
*/
class My_Reflection_Method extends ReflectionMethod
{
public
$visibility = array();

public function
__construct($o, $m)
{
parent::__construct($o, $m);
$this->visibility = Reflection::getModifierNames($this->getModifiers());
}
}

/**
* Sınıf denemesi 1
*
*/
class T {
protected function
x() {}
}

/**
* Sınıf denemesi 2
*
*/
class U extends T {
function
x() {}
}

// Bilgiler görelim
var_dump(new My_Reflection_Method('U', 'x'));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

object(My_Reflection_Method)#1 (3) {
  ["visibility"]=>
  array(1) {
    [0]=>
    string(6) "public"
  }
  ["name"]=>
  string(1) "x"
  ["class"]=>
  string(1) "U"
}
Dikkat

Kurucunun üzerine yazıyorsanız, herhangi bir kod yazmadan önce ebeveynin kurucusunu çağırmayı unutmayın. Bunu yapmazsanız şöyle bir sonuç alırsınız: Fatal error: Internal error: Failed to retrieve the reflection object Türkçesi: Ölümcül hata: Dahili hata: reflection nesnesi alınamadı

add a note add a note

User Contributed Notes 1 note

up
-2
khelaz at gmail dot com
13 years ago
Extending class ReflectionFunction to get source code of function

<?php
class Custom_Reflection_Function extends ReflectionFunction {
   
    public function
getSource() {
        if( !
file_exists( $this->getFileName() ) ) return false;
       
       
$start_offset = ( $this->getStartLine() - 1 );
       
$end_offset   = ( $this->getEndLine() - $this->getStartLine() ) + 1;

        return
join( '', array_slice( file( $this->getFileName() ), $start_offset, $end_offset ) );
    }
}
?>
To Top