note 125441 added to function.class-alias
| From: | Anonymous@php.net | Date: | Fri, 16 Oct 2020 06:48:06 +0000 |
| Subject: | note 125441 added to function.class-alias | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-215599@lists.php.net to get a copy of this message | ||
Check is alias:
<?php
/**
* @param string $class Class name
* @return bool
*/
function is_alias(string $class): bool
{
return $class !== (new ReflectionClass($class))->name;
}
?>
Get class aliases:
<?php
/**
* @param string $class Class name
* @param bool $throw Throw exception at error?
* @return string[]|null Aliases or null at error in silent mode
* @throws InvalidArgumentException Class not exists or it's alias
*/
function get_class_aliases(string $class, bool $throw = false): ?array
{
/**
* @var array An array of defined classes: keys - classes, values - aliases
*/
static $classes = [];
// check: class exists
if (! class_exists($class, true)) {
if ($throw) {
throw new InvalidArgumentException('Class ' . $class . ' not
exists');
}
return null;
}
// refresh list
$newClasses = array_diff(get_declared_classes(), array_keys($classes));
if ($newClasses) {
$abc = range('a', 'z');
foreach ($newClasses as $newClass) {
// fast check first char: class_alias() convert alias to lower case
if (in_array($newClass[0], $abc, true)) {
$realClass = (new ReflectionClass($newClass))->getName();
$classes[$newClass] = $newClass !== $realClass ? $realClass : null;
} else {
$classes[$newClass] = null;
}
}
unset($abc, $newClasses);
}
// check: is alias?
if (! empty($classes[$class])) {
if ($throw) {
throw new InvalidArgumentException($class . ' is alias for class ' .
$classes[$class]);
}
return null;
}
// find aliases
return array_keys($classes, $class, true);
}
?>
Usage:
<?php
class Foo {}
class_alias('Foo', 'Bar');
class_alias('Bar', 'Baz');
$aliases = get_class_aliases('Foo', true); // ['bar', 'baz']
?>
----
Server IP: 45.112.84.4
Probable Submitter: 185.85.3.172 (proxied: 31.129.215.166)
----
Manual Page -- http://php.net/manual/en/function.class-alias.php
Edit -- https://master.php.net/note/edit/125441
Del: integrated -- https://master.php.net/note/delete/125441/integrated
Del: useless -- https://master.php.net/note/delete/125441/useless
Del: bad code -- https://master.php.net/note/delete/125441/bad+code
Del: spam -- https://master.php.net/note/delete/125441/spam
Del: non-english -- https://master.php.net/note/delete/125441/non-english
Del: in docs -- https://master.php.net/note/delete/125441/in+docs
Del: other reasons-- https://master.php.net/note/delete/125441
Reject -- https://master.php.net/note/reject/125441
Search -- https://master.php.net/manage/user-notes.php