downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

class_exists> <call_user_method
[edit] Last updated: Fri, 10 Feb 2012

view this page in

class_alias

(PHP 5 >= 5.3.0)

class_aliasクラスのエイリアスを作成する

説明

bool class_alias ([ string $original [, string $alias ]] )

alias という名前のエイリアスを、 定義済みのクラス original に対して作成します。 エイリアスは、元のクラスとまったく同一のものとなります。

パラメータ

original

元となるクラス。

alias

クラスのエイリアス名。

返り値

成功した場合に 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_exists> <call_user_method
[edit] Last updated: Fri, 10 Feb 2012
 
add a note add a note User Contributed Notes class_alias
adam at adamhahn dot com 06-Sep-2011 09:13
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.
programmer-comfreek at hotmail dot com 15-Aug-2011 06:38
If you defined the class 'original' in a namespace, you will have to specify the namespace(s), too:
<?php
namespace ns1\ns2\ns3;

class
A {}

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');
?>
nicolas dot grekas+php at gmail dot com 31-Dec-2010 10:09
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 !
?>
nicolas dot grekas+php at gmail dot com 30-Dec-2010 11: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 12: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.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites