php里new self() 一般在類內部使用,作用是對自身類實例化,搞不明白干嘛要弄這么個方法,弄個實例加深下大家對這個東東的理解
class test{
public function __construct(){
echo 'hello';
}
public function test2(){
new self();
}
}
test::test2();
這個實例會輸出hello
后邊發現還有個new static()方法,那這個跟new self()有什么區別呢,看代碼說話:
class fa {
public function getfa1() {
return new self();
}
public function getfa2() {
return new static();
}
}
$f = new fa();
print get_class($f->getfa1());
echo '
';
print get_class($f->getfa2());
get_class()方法是用於獲取實例所屬的類名
輸出:
fa
fa兩個輸出都一樣,感覺沒啥區別呀,后邊突發奇想繼承下再看看
class er1 extends fa {
}
class er2 extends fa {
}
$er1 = new er1();
$er2 = new er2();
print get_class($er1->getfa1());
echo '
';
print get_class($er1->getfa2());
echo '
';
print get_class($er2->getfa1());
echo '
';
print get_class($er2->getfa2());
輸出:
fa
er1
fa
er2
現在輸出不一樣了,明白new self()與new static()的區別了,只有在繼承中才能體現出來,如果沒有任何繼承,那么這兩者是沒有區別的,在繼承中new self()返回的實例是自己所在的那個類,不管誰調用都是不變的,new static()是由調用者決定的