get_class()
오브젝트를 넘겨 클래스 이름을 반환하는 함수.
class Foo
{
public function echoName()
{
// 클래스 내부에선 파라메터를 지정하지 않고 자기자신을 지칭
echo "My name is ".get_class()."\n";
}
}
$foo = new Foo();
$foo->echoName();
// 클래스 외부에선 이름을 알고자 하는 오브젝트를 파라메터로 넘김
echo get_class($foo)."\n";
/*
[출력결과]
My name is Foo
Foo
*/
상속된 클래스 내부에서 사용하게 될 경우 파라메터에 $this를 지정해줘야 정확히 자기 자신을 지칭.
class Bar
{
public function echoName()
{
printf("[1] \$this = %s\n", get_class($this));
printf("[2] blank = %s\n", get_class());
}
}
class Foo extends Bar
{
}
$Foo = new Foo();
$Foo->echoName();
/*
[출력결과]
[1] $this = Foo
[2] blank = Bar
*/
get_called_class()
late static binding 된 클래스 이름을 반환.
static 클래스에서 정확히 자기 자신을 지칭하기 위해선 반드시 get_called_class() 함수를 써야함.
abstract class Bar
{
public static function echoName()
{
echo 'get_class = '.get_class()."\n";
echo 'get_called_class = '.get_called_class()."\n";
}
}
class Foo extends Bar
{
}
Foo::echoName();
/*
[출력결과]
get_class = Bar
get_called_class = Foo
*/
get_parent_class()
조상 클래스 이름을 반환하는 함수.
class Ancestor
{
public function echoParentName()
{
echo "My name is ".get_class($this).", my parent name is ".get_parent_class($this)."\n";
}
}
class Descendant1 extends Ancestor
{
}
class Descendant2 extends Descendant1
{
}
$aClass = array();
$aClass[] = new Ancestor();
$aClass[] = new Descendant1();
$aClass[] = new Descendant2();
$sMethod = 'echoParentName';
foreach ($aClass as $obj) {
$obj->$sMethod();
}
/*
[출력결과]
My name is Ancestor, my parent name is
My name is Descendant1, my parent name is Ancestor
My name is Descendant2, my parent name is Descendant1
*/
여러 가지로 응용이 가능한데 아래는 상속구조를 간단하게 출력하는 예제.
class A
{
}
class B extends A
{
}
class C extends B
{
}
class D extends C
{
}
$descendantName = 'D';
$ancestorList = getAllAncestor($descendantName);
echo implode(' -> ', $ancestorList).' -> '.$descendantName."\n";
// 최상위 조상까지 다 반환하는 함수
function getAllAncestor($obj)
{
$ancestorList = array();
while (($ancestor = get_parent_class($obj)) !== false) {
array_unshift($ancestorList, $ancestor);
$obj = $ancestor;
}
return $ancestorList;
}
/*
[출력결과]
A -> B -> C -> D
*/
is_subclass_of()
arg1이 arg2의 subclass인지 여부 반환.
class A
{
}
class B extends A
{
}
class C extends B
{
}
$A = new A();
$B = new B();
$C = new C();
checkSubClass('B', 'A');
checkSubClass('C', 'B');
checkSubClass('C', 'A');
checkSubClass('B', 'B');
function checkSubclass($child, $parent)
{
$result = (is_subclass_of($child, $parent) === true) ? 'true' : 'false';
echo $child.' is subclass of '.$parent.' = '.$result."\n";
}
/*
[출력결과]
B is subclass of A = true
C is subclass of B = true
C is subclass of A = true
B is subclass of B = false
*/
[참조]
'PHP' 카테고리의 다른 글
[PHP] 한글 종성유무에 맞는 조사(은/는/이/가/을/를/과/와) 변환 (0) | 2015.02.12 |
---|---|
[PHP] MongoDB _id로 query 하기 (query on _id) (0) | 2014.12.23 |
[PHP] header() 로 redirect 했을 때 HTTP_REFERER가 사라짐. (0) | 2014.10.29 |
[PHP] 에디트플러스에서 다른 IDE처럼 함수정의부분으로 이동하는 기능구현 (EditPlus jump to declaration) (2) | 2014.10.11 |
[PHP] Windows에서 백그라운드로 커맨드 실행 (PHP exec as background process on Windows) (0) | 2014.10.09 |