ConFoo: Call for paper is now Open

کلاس ReflectionParameter

Introduction

کلاس ReflectionParameter اطلاعاتی درباره پارامترهای متد یا تابع باز می‌گرداند.

برای بررسی پارامترهای تابع ابتدا یک نمونه از ReflectionFunction یا ReflectionMethod بسازید و از ReflectionFunctionAbstract::getParameters() آنها برای دستیابی به آرایه پارامترها بهره برید.

Class synopsis

ReflectionParameter implements Reflector {
/* Properties */
public $name ;
/* Methods */
public bool allowsNull ( void )
final private void __clone ( void )
__construct ( string $function , string $parameter )
public static string export ( string $function , string $parameter [, bool $return ] )
public ReflectionClass getClass ( void )
public ReflectionClass getDeclaringClass ( void )
public ReflectionFunction getDeclaringFunction ( void )
public mixed getDefaultValue ( void )
public string getName ( void )
public int getPosition ( void )
public bool isArray ( void )
public bool isDefaultValueAvailable ( void )
public bool isOptional ( void )
public bool isPassedByReference ( void )
public string __toString ( void )
}

Properties

name

Prop description

Table of Contents

add a note add a note

User Contributed Notes 3 notes

up
1
fgm at riff dot org
6 years ago
The note about the signature of the ReflectionParameter constructor is actually incomplete, at least in 5.2.5: it is possible to use an integer for the second parameter, and the constructor will use it to return the n-th parameter.

This allows you to obtain proper ReflectionParameter objects even when documenting code from extensions which (strangely enough) define several parameters with the same name. The string-based constructor always returns the first parameter with the matching name, whereas the integer-based constructor correctly returns the n-th parameter.

So, in short, this works:
<?php
// supposing the extension defined something like:
// Some_Class::someMethod($a, $x, $y, $x, $y)
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 4);
// returns the last parameter, whereas
$p = new ReflectionParameter(array('Some_Class', 'someMethod'), 'y');
// always returns the first $y at position 2
?>
up
0
massimo at mmware dot it
7 years ago
I found these limitations using class ReflectionParameter from ReflectionFunction with INTERNAL FUNCTIONS (eg print_r, str_replace, ... ) :

1. parameter names don't match with manual: (try example 19.35 with arg "call_user_func" )
2. some functions (eg PCRE function, preg_match etc) have EMPTY parameter names
3. calling getDefaultValue on Parameters will result in Exception "Cannot determine default value for internal functions"
up
-1
killgecNOFSPAM at gmail dot com
7 years ago
Signature of constructor of ReflectionParameter correctly is:

public function __construct(array/string $function, string $name);

where $function is either a name of a global function, or a class/method name pair.
To Top