CakeFest 2024: The Official CakePHP Conference

Étendre la classe

Si vous voulez créer une version spéciale de la classe interne (par exemple, pour créer une portion HTML mis en évidence lors de l'export, pour avoir un accès facile aux variables des membres au lieu des variables des méthodes, ou bien pour avoir des méthodes utiles), vous pouvez étendre la classe principale.

Exemple #1 Étendre les classes internes

<?php
/**
* Mon 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());
}
}

/**
* Demo classe #1
*
*/
class T {
protected function
x() {}
}

/**
* Demo classe #2
*
*/
class U extends T {
function
x() {}
}

// Affichage des informations
var_dump(new My_Reflection_Method('U', 'x'));
?>

Résultat de l'exemple ci-dessus est similaire à :

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

Si vous écrasez le constructeur, souvenez-vous d'appeler le constructeur parent avant d'insérer le moindre code. Si vous ne le faîtes pas, voici ce qui arrivera : Fatal error: Internal error: Failed to retrieve the reflection object

add a note

User Contributed Notes 1 note

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