class_alias

(PHP 5 >= 5.3.0)

class_aliasСоздает псевдоним для указанного класса

Описание

bool class_alias ( string $original , string $alias [, bool $autoload = TRUE ] )

Создает псевдоним alias для класса original. Новый класс с псевдонимом будет точно таким же, как и оригинальный класс.

Список параметров

original

Оригинальный класс.

alias

Имя псевдонима для класса.

autoload

Нужно ли подгружать оригинальный класс, если он не был найден.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования class_alias()

<?php

class foo { }

class_alias('foo''bar');

$a = new foo;
$b = new bar;

// объекты одинаковы
var_dump($a == $b$a === $b);
var_dump($a instanceof $b);

// классы одинаковы
var_dump($a instanceof foo);
var_dump($a instanceof bar);

var_dump($b instanceof foo);
var_dump($b instanceof bar);

?>

Результат выполнения данного примера:

bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

Смотрите также

  • get_parent_class() - Возвращает имя родительского класса для объекта или класса
  • is_subclass_of() - Проверяет, содержит ли объект в своем дереве предков указанный класс

Коментарии

class_alias also works for interfaces!

<?php
interface foo {}
class_alias('foo''bar');
echo 
interface_exists('bar') ? 'yes!' 'no'// prints yes!
?>
2010-12-30 16:41:14
http://php5.kiev.ua/manual/ru/function.class-alias.html
At first, you might wonder that:
<?php class {}; class_alias('A''B'); ?>

is equivalent to:
<?php class {}; class extends {}; ?>

BUT when derivation creates a new class name - that means, you can then instantiate a new kind of objects - aliasing is just what it says: a synonym, so objects instantiated with the aliased name are of the exact same kind of objects instantiated with the non-aliased name.

See this code for example:
<?php
class {};
class 
B1 extends {};
class_alias('A''B2');

$b1 = new B1; echo get_class($b1); // prints B1
$b2 = new B2; echo get_class($b2); // prints A !
?>
2010-12-31 03:09:56
http://php5.kiev.ua/manual/ru/function.class-alias.html
If you defined the class 'original' in a namespace, you will have to specify the namespace(s), too:
<?php
namespace ns1ns2ns3
;

class 
{}

class_alias('ns1\ns2\ns3\A''B');
/* or if you want B to exist in ns1\ns2\ns3 */
class_alias('ns1\ns2\ns3\A''ns1\ns2\ns3\B');
?>
2011-08-15 12:38:01
http://php5.kiev.ua/manual/ru/function.class-alias.html
Something to note,

If the $original class has not yet been defined or loaded, the auto loader will be invoked in order to try and load it.

If the class for which you are trying to create an alias does not exist, or can not be loaded with the auto loader, you will generate a PHP Warning.
2011-09-06 15:13:39
http://php5.kiev.ua/manual/ru/function.class-alias.html
Автор:
Like class_alias but for functions:

<?php
function function_alias ($original$alias) {
 
 
$args func_get_args();
 
assert('count($args) == 2''function_alias() require exactly two arguments');
 
assert('is_string($original) && is_string($alias)''function_alias() require string arguments');
 
 
// valid function name - functions.user-defined
 
assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
   
"'$original' is not a valid function name");
 
assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
   
"'$alias' is not a valid function name");
 
 
$aliasNamespace substr($alias0strrpos($alias'\\') !== false strrpos($alias'\\') : 0);
 
$aliasName substr($aliasstrrpos($alias'\\') !== false strrpos($alias'\\') + 0);
 
$serializedOriginal var_export($originaltrue);
 
  eval(
"
    namespace $aliasNamespace {
      function $aliasName () {
        return call_user_func_array($serializedOriginal, func_get_args());
      }
    }
  "
);
 
}

?>

Until hopefully function_alias is added to php...
2013-02-12 19:42:54
http://php5.kiev.ua/manual/ru/function.class-alias.html
At first, you might wonder that:
<?php class {}; class_alias('A''B'); ?>

is equivalent to:
<?php class {}; class extends {}; ?>

class_alias is NOT equivalent to class extending! Private methods/properties are unseen in child classes, but in alias classes they are.
2013-02-25 13:08:40
http://php5.kiev.ua/manual/ru/function.class-alias.html
class_alias() gives you the ability to do conditional imports.

Whereas the following will not work:

<?php
namespace Component
;

if (
version_compare(PHP_VERSION'5.4.0''gte')) {
    use 
MyArrayObject;
} else {
    use 
ArrayObject;
}

class 
Container extends ArrayObject
{
}
?>

the following, using class_alias, will:

<?php
namespace Component
;

if (
version_compare(PHP_VERSION'5.4.0''lt')) {
   
class_alias('My\ArrayObject''Component\ArrayObject');
} else {
   
class_alias('ArrayObject''Component\ArrayObject');
}

class 
Container extends ArrayObject
{
}
?>

The semantics are slightly different (I'm now indicating that Container extends from an ArrayObject implementation in the same namespace), but the overall idea is the same: conditional imports.
2013-03-06 16:05:28
http://php5.kiev.ua/manual/ru/function.class-alias.html
If you need the same function in PHP version < 5.3 you can use this

<?php
function class_alias($original,$alias) {
   
$newclass create_function('','class '.$alias.' extends '.$original.' {}');
   
$newclass();
}
?>
2014-02-06 16:19:57
http://php5.kiev.ua/manual/ru/function.class-alias.html
class_alias() creates aliases only for user defined classes, not for classes supplied by PHP (PHP will show the warning "First argument of class_alias() must be a name of user defined class"). To create aliases for every kind of classes, use namespaces:

<?php

// Does not work
class_alias("ZipArchive""myZip");

// Creates class alias "myZip" of class "ZipArchive"
use ZipArchive as myZip;

?>
2015-09-14 22:00:08
http://php5.kiev.ua/manual/ru/function.class-alias.html
It also works with Traits!

<?php 
trait Foo 
{}
class_alias("Foo","Bar");
echo 
trait_exists("Bar") ? 'yes' 'no'
?>
//yes
2016-09-22 06:30:21
http://php5.kiev.ua/manual/ru/function.class-alias.html
Doesn't work with coupled classes when used along with autoloading.

For example, in these classes where each class is autoloaded in a separate class file:

Foo.php:

<?php
interface Foo{
  public function 
fx(Bar $bar);
}
?>

Bar2.php:

<?php
class Bar2 implements Foo{
  public function 
fx(Bar2 $bar){
   
// some implementation code here
 
}
}
?>

Bar.php:

<?php
class_alias
("Bar2""Bar");
?>

When used with an autoloader like this:

<?php
spl_autoload_register
(function($class){
  require(
$class ".php");
});
new 
Bar;
?>

Results in fatal error:

    Declaration of Bar2::fx(Bar2 $bar) must be compatible with Foo::fx(Bar $bar) in ~/Bar2.php on line 2
2017-01-07 18:06:55
http://php5.kiev.ua/manual/ru/function.class-alias.html
Doesn't work with coupled classes when used along with autoloading.

For example, in these classes where each class is autoloaded in a separate class file:

Foo.php:

<?php
interface Foo{
  public function 
fx(Bar $bar);
}
?>

Bar2.php:

<?php
class Bar2 implements Foo{
  public function 
fx(Bar2 $bar){
   
// some implementation code here
 
}
}
?>

Bar.php:

<?php
class_alias
("Bar2""Bar");
?>

When used with an autoloader like this:

<?php
spl_autoload_register
(function($class){
  require(
$class ".php");
});
new 
Bar;
?>

Results in fatal error:

    Declaration of Bar2::fx(Bar2 $bar) must be compatible with Foo::fx(Bar $bar) in ~/Bar2.php on line 2
2017-01-07 18:06:55
http://php5.kiev.ua/manual/ru/function.class-alias.html

    Поддержать сайт на родительском проекте КГБ