PHP workshop for 2 days with Shopware, Sylius, PHPUnit and Codeception in Duisburg

ReflectionFunction Sınıfı

(PHP 5, PHP 7, PHP 8)

Giriş

ReflectionFunction sınıfı bir işlevle ilgili bilgi verir.

Sınıf Sözdizimi

class ReflectionFunction extends ReflectionFunctionAbstract implements Reflector {
/* Sabitler */
const int IS_DEPRECATED = 262144;
/* Özellikler */
public $name;
/* Yöntemler */
public __construct(Closure|string $function)
public static export(string $isim, string $ihracet = ?): string
public invoke(mixed ...$değiştirgeler): mixed
public invokeArgs(array $değiştirgeler): mixed
public isDisabled(): bool
public __toString(): string
/* Miras alınan yöntemler */
public ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array
}

Özellikler

name

İşlevin ismi. Salt-okunur olup, bir yazma çabası ReflectionException istisnasına yol açar.

Öntanımlı Sabitler

ReflectionFunction Değiştiricileri

ReflectionFunction::IS_DEPRECATED

İşlevin kullanımının önerilmediğini belirtir.

İçindekiler

add a note add a note

User Contributed Notes 2 notes

up
1
a dot lucassilvadeoliveira at gmail dot com
10 months ago
We can use this functionality to automatically pass arguments to our function based on some data structure.

NOTE: I am using a php 8.0> feature called "Nameds parameter"

<?php

$valuesToProcess
= [
 
'name' => 'Anderson Lucas Silva de Oliveira',
 
'age' => 21,
 
'hobbie' => 'Play games'
];

function
processUserData($name, $age, $job = "", $hobbie = "")
{
   
$msg = "Hello $name. You have $age years old";
    if (!empty(
$job)) {
   
$msg .= ". Your job is $job";
    }

    if (!empty(
$hobbie)) {
       
$msg .= ". Your hobbie is $hobbie";
    }

    echo
$msg . ".";
}

$refFunction = new ReflectionFunction('processUserData');
$parameters = $refFunction->getParameters();

$validParameters = [];
foreach (
$parameters as $parameter) {
    if (!
array_key_exists($parameter->getName(), $valuesToProcess) && !$parameter->isOptional()) {
        throw new
DomainException('Cannot resolve the parameter' . $parameter->getName());
    }

    if(!
array_key_exists($parameter->getName(), $valuesToProcess)) {
        continue;
    }

   
$validParameters[$parameter->getName()] = $valuesToProcess[$parameter->getName()];
}

$refFunction->invoke(...$validParameters);
?>

Results in:

Hello Anderson Lucas Silva de Oliveira. You have 21 years old. Your hobbie is Play games.
up
0
Lorenz R.S.
10 years ago
Here is a concise example of ReflectionFunction usage for Parameter Reflection / introspection (e.g. to automatically generate API descriptions)

<?php
$properties
= $reflector->getProperties();
$refFunc = new ReflectionFunction('preg_replace');
foreach(
$refFunc->getParameters() as $param ){
   
//invokes ■ReflectionParameter::__toString
   
print $param;
}
?>

prints:

Parameter #0 [ <required> $regex ]
Parameter #1 [ <required> $replace ]
Parameter #2 [ <required> $subject ]
Parameter #3 [ <optional> $limit ]
Parameter #4 [ <optional> &$count ]
To Top