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.
PHP.mk документација
ReflectionFunction
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
class.reflectionfunction.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
class.reflectionfunction.php
ReflectionFunction
Референца за `class.reflectionfunction.php` со подобрена типографија и навигација.
Класата ReflectionFunction
класата mysqli_driver
Вовед
На ReflectionFunction класата известува информации за функција.
Синопсис на класата
/* Константи */
/* Наследени својства */
/* Методи */
/* Наследени методи */
}Претходно дефинирани константи
Модификатори на ReflectionFunction
-
ReflectionFunction::IS_DEPRECATEDint -
Укажува на застарени функции.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.4.0 | Константите на класата сега се типизирани. |
| 8.0.0 | ReflectionFunction::export() Враќа ODBC резултат објект ако SQL командата беше успешно извршена, или |
Содржина
- ReflectionFunction::__construct — Конструира објект ReflectionFunction
- ReflectionFunction::export — Експортира функција
- ReflectionFunction::getClosure — Враќа динамички креирана затвореност за функцијата
- ReflectionFunction::invoke — Повикува функција
- ReflectionFunction::invokeArgs — Повикува аргументи на функција
- ReflectionFunction::isAnonymous — Проверува дали функцијата е анонимна
- ReflectionFunction::isDisabled — Проверува дали функцијата е оневозможена
- ReflectionFunction::__toString — Враќа текстуална репрезентација на објектот ReflectionFunction
Белешки од корисници 2 забелешки
dabidi at slupca dot pl ¶
пред 5 години
Лоренц Р.С. ¶
пред 14 години
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 ]