ConFoo Montreal 2017 Calling for Papers

Extendendo

Caso queira criar versões especializdas das classes nativas(digamos, para criar HTML colorido quando sendo exportado, tendo variáveis membros de fácil acesso ao invés de métodos ou tendo métodos utilitários), você pode extendê-las.

Exemplo #1 Extendendo classe nativas

<?php
/**
 * Minha Classe Reflection_Method
 */
class My_Reflection_Method extends ReflectionMethod
{
    public 
$visibility = array();

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

/**
 * Demonstração classe #1
 *
 */
class {
    protected function 
x() {}
}

/**
 * Demonstração classe #2
 *
 */
class extends {
    function 
x() {}
}

// Imprimir as informações
var_dump(new My_Reflection_Method('U''x'));
?>

O exemplo acima irá imprimir algo similar à:

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

Se construtor for sobrescrito, lembre-se de chamar o contrutor pai antes de qualquer código que você adicionar. Se isto não for feito irá resultar no seguinte erro: Fatal error: Internal error: Failed to retrieve the reflection object

add a note add a note

User Contributed Notes 1 note

up
-5
khelaz at gmail dot com
5 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