When building tools that inspect PHP code, ReflectionFunctionAbstract::getName() helps answer a focused question: returns the complete declared function name.
Reflection is useful in framework tooling, dependency injection, testing, code inspection and debugging.
What Is ReflectionFunctionAbstract::getName()?
Returns the complete declared function name.
Its method signature is:
public function getName(): string
This method has no required arguments.
Return value: string
Example 1: Inspect a function or callable
Start with a self-contained PHP declaration and inspect the method result.
<?php
declare(strict_types=1);
#[Attribute(Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_PARAMETER)]
class FunctionMarker { public function __construct(public string $label) {} }
/** Formats one price for a product listing. */
#[FunctionMarker('currency')]
function formatPrice(float $amount, string $currency = 'USD'): string {
return $currency . ' ' . number_format($amount, 2);
}
function logMessages(string ...$messages): string { return implode(', ', $messages); }
function &returnReference(array &$values): array { return $values; }
function valuesFromGenerator(): Generator { yield 10; yield 20; }
class FormatterService {
public function label(int $id): string { return '#' . $id; }
public static function uppercase(string $message): string { return strtoupper($message); }
}
$functionReflection = new ReflectionFunction("formatPrice");
$result = $functionReflection->getName();
var_dump($result);
Output:
string(11) "formatPrice"
Explanation: Returns the complete declared function name.
Example 2: Compare a different callable
Next, change the reflected declaration or parameter to observe a related situation.
<?php
declare(strict_types=1);
#[Attribute(Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_PARAMETER)]
class FunctionMarker { public function __construct(public string $label) {} }
/** Formats one price for a product listing. */
#[FunctionMarker('currency')]
function formatPrice(float $amount, string $currency = 'USD'): string {
return $currency . ' ' . number_format($amount, 2);
}
function logMessages(string ...$messages): string { return implode(', ', $messages); }
function &returnReference(array &$values): array { return $values; }
function valuesFromGenerator(): Generator { yield 10; yield 20; }
class FormatterService {
public function label(int $id): string { return '#' . $id; }
public static function uppercase(string $message): string { return strtoupper($message); }
}
$functionReflection = new ReflectionFunction("logMessages");
$result = $functionReflection->getName();
var_dump($result);
// Check the returned value type before using the result.
echo "\nResult type: " . get_debug_type($result);
Output:
string(11) "logMessages"
Result type: string
Explanation: Closures have generated names and may differ from ordinary named functions.
Practical Example: Use reflection in validation or tooling
This final case shows how the same API can be used when inspecting application definitions.
<?php
declare(strict_types=1);
#[Attribute(Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_PARAMETER)]
class FunctionMarker { public function __construct(public string $label) {} }
/** Formats one price for a product listing. */
#[FunctionMarker('currency')]
function formatPrice(float $amount, string $currency = 'USD'): string {
return $currency . ' ' . number_format($amount, 2);
}
function logMessages(string ...$messages): string { return implode(', ', $messages); }
function &returnReference(array &$values): array { return $values; }
function valuesFromGenerator(): Generator { yield 10; yield 20; }
class FormatterService {
public function label(int $id): string { return '#' . $id; }
public static function uppercase(string $message): string { return strtoupper($message); }
}
$functionReflection = new ReflectionFunction("strtoupper");
$result = $functionReflection->getName();
var_dump($result);
// Use the reflection result in a simple decision.
if (is_bool($result)) {
echo "\nStatus: " . ($result ? "yes" : "no");
} elseif (is_array($result)) {
echo "\nEntries: " . count($result);
} elseif ($result === null) {
echo "\nNo value returned";
} else {
echo "\nReflection result available";
}
Output:
string(10) "strtoupper"
Reflection result available
Explanation: getShortName excludes the namespace portion.
Important Behavior and Edge Cases
- Closures have generated names and may differ from ordinary named functions.
- getShortName excludes the namespace portion.
- Reflection describes declarations and runtime state; requesting metadata does not automatically validate or sanitize application input.
Comparison With Related Approaches
| Approach | When to Use It |
|---|---|
ReflectionFunctionAbstract::getName() | Returns the complete declared function name. |
Related API | getShortName excludes the namespace portion. |
Common Beginner Mistakes
| Mistake | Correct Approach |
|---|---|
| Ignoring this condition: Closures have generated names and may differ from ordinary named functions. | Handle the specific limitation: Closures have generated names and may differ from ordinary named functions. |
| Confusing this method with Related API | getShortName excludes the namespace portion. |
Key Takeaways
- Returns the complete declared function name.
- Closures have generated names and may differ from ordinary named functions.
- getShortName excludes the namespace portion.
Use ReflectionFunctionAbstract::getName() when you need the precise metadata or behavior demonstrated above. Keep the target declaration and relevant PHP version in mind when adapting the examples.