Funkcja isDefaultValueAvailable
może pracować tylko na funkcje zdefiniowane przez użytkownika, a nie działa na funkcje systemu (rdzeń PZP).
Tak, jak przykładowo:
class Foo
{
public function foo($var = null)
{
}
}
// Get the "var" argument in method Foo::foo
$refParameter = (new ReflectionClass('Foo'))->getMethod('foo')->getParameters()[0];
print "User function Foo::foo:\n\n";
print 'Optional: ' . ($refParameter->isOptional() ? 'true' : 'false') . "\n";
print 'Default available: ' . ($refParameter->isDefaultValueAvailable() ? 'true' : 'false') . "\n";
if ($refParameter->isDefaultValueAvailable()) {
print 'Default value: ' . var_export($refParameter->getDefaultValue(), 1);
}
print "\n\n";
print "System function substr\n\n";
// Get the "length" parameter from function substr
$refParameter = (new \ReflectionFunction('substr'))->getParameters()[2];
print 'Optional: ' . ($refParameter->isOptional() ? 'true' : 'false') . "\n";
print 'Default available: ' . ($refParameter->isDefaultValueAvailable() ? 'true' : 'false') . "\n";
if ($refParameter->isDefaultValueAvailable()) {
print 'Default value: ' . var_export($refParameter->getDefaultValue(), 1);
}
print "\n\n";
, a ten kod: twój może uzyskać wartość domyślną tylko z funkcji zdefiniowanej przez użytkownika i nie mogą dostać od funkcji systemu (substr
jako przykład). Ale metoda zwróciła w funkcji zdefiniowanej przez użytkownika i funkcji systemu.
Wniosek:
- Jeśli chcesz sprawdzić swój parametr jest opcjonalny, musi wykorzystać swoje
isOptional
metody.
- Możesz pobrać domyślną wartość tylko z funkcji zdefiniowanej przez użytkownika.
- Nie można użyć metody
isDefaultValueAvailable
dla zdefiniowanej funkcji systemowej (PHP).
Źródło: https://github.com/php/php-src/blob/ccf863c8ce7e746948fb060d515960492c41ed27/ext/reflection/php_reflection.c#L2536-L2573
Bądź bardzo ostrożny z tych stwierdzeń zagnieżdżonych trójskładnikowych. Nic tylko kłopoty IMHO – Phil
Masz jakiś przykład, że się nie udaje? Deklaracje trójstronne? – LNT
Są po prostu trudne do odczytania, a proces logiczny nie zawsze jest jasny. Zobacz notatkę tutaj ~ http://php.net/manual/language.operators.comparison.php#example-137 – Phil