At first, you might wonder that:
<?php class A {}; class_alias('A', 'B'); ?>
is equivalent to:
<?php class A {}; class B extends A {}; ?>
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 A {};
class B1 extends A {};
class_alias('A', 'B2');
$b1 = new B1; echo get_class($b1); // prints B1
$b2 = new B2; echo get_class($b2); // prints A !
?>
class_alias
(PHP 5 >= 5.3.0)
class_alias — Crea un alias para una clase
Descripción
bool class_alias
([ string $original
[, string $alias
]] )
Crea un alias dado por alias basado en la clase definida original. La clase apodada es exactamente la misma que la clase original.
Parámetros
- original
-
La clase original.
- alias
-
El nombre del alias para la clase.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplos
Example #1 Ejemplo de class_alias()
<?php
class foo { }
class_alias('foo', 'bar');
$a = new foo;
$b = new bar;
// los objetos son los mismos
var_dump($a == $b, $a === $b);
var_dump($a instanceof $b);
// las clases son las mismas
var_dump($a instanceof foo);
var_dump($a instanceof bar);
var_dump($b instanceof foo);
var_dump($b instanceof bar);
?>
El resultado del ejemplo sería:
bool(true) bool(false) bool(true) bool(true) bool(true) bool(true) bool(true)
Ver también
- get_parent_class() - Recupera el nombre de la clase padre de un objeto o clase
- is_subclass_of() - Verifica si el objeto tiene esta clase como uno de sus padres
nicolas dot grekas+php at gmail dot com
31-Dec-2010 09:09
nicolas dot grekas+php at gmail dot com
30-Dec-2010 10:41
class_alias also works for interfaces!
<?php
interface foo {}
class_alias('foo', 'bar');
echo interface_exists('bar') ? 'yes!' : 'no'; // prints yes!
?>
paul [dot] kotets [at] gmail [dot] com
03-Sep-2009 10:43
This function will appear in PHP 5.3 (at least I can use it with PHP 5.3, build Aug 7 2009 08:21:14)
For older versions of PHP I wrote the next function:
<?php
if (!function_exists('class_alias')) {
function class_alias($original, $alias) {
eval('abstract class ' . $alias . ' extends ' . $original . ' {}');
}
}
?>
Keyword 'abstract' is used for classes, which defines abstract methods.
This function is used in autoload purposes (when I extend classes), so abstract keyword doesn't broke anything for me.
