php static延遲靜態(tài)綁定
來源:易賢網(wǎng) 閱讀:1460 次 日期:2014-08-22 11:15:31
溫馨提示:易賢網(wǎng)小編為您整理了“php static延遲靜態(tài)綁定”,方便廣大網(wǎng)友查閱!

如果你是一個懶惰的程序員,你看到以下代碼可能會惱火

abstract class U{

}

class u1 extends U{

public static function create(){

return new u1();

}

}

class u2 extends U{

public static function create(){

return new u2();

}

}

這段代碼正常工作是沒問題,但大量重復(fù)的代碼會很煩人

我不想在每個子類中添加create方法,如果把create方法放在超類U中,代碼可能是

abstract class U{

public static function create(){

return new self();

}

}

class u1 extends U{

function a(){}

}

class u2 extends U{

}

u1::create();

看起來很優(yōu)雅整潔,現(xiàn)在我們把常見代碼放在一個位置,并用self作為對該類的引用。但這里我們對self做了一個假設(shè)。

實(shí)際上,self對該類所起的作用與$this對對象所起的作用并不完全相同。self指的不是調(diào)用上下文,他指的是解析上下文,因此如果運(yùn)行上面的列子,將會得到

Fatal error: Cannot instantiate abstract class U in D:wampwwwtestoopstatic.php on line 21

因此self被解析為定義create的U,而不是解析為調(diào)用self的u1類。

php5.3之前,在這方面都有嚴(yán)格的限制,產(chǎn)生過很多笨拙的解決方案,php5.3引入了延遲靜態(tài)綁定及使用關(guān)鍵字 static

static類似self,但它指的是被調(diào)用的類而不是包含類。

在以下例子中u1::create將生成u1對象,而不是實(shí)例化U對象

abstract class U{

public static function create(){

return new static();

}

}

class u1 extends U{

}

class u2 extends U{

}

u1::create();

static不僅可以用于實(shí)例化,和self,parent一樣還可以作為靜態(tài)方法的調(diào)用標(biāo)識符,甚至是從非靜態(tài)上下文中調(diào)用

abstract class U{

private $group;

public function __construct(){

$this->group=static::getGroup();

}

public static function create(){

return new static();

}

static function getGroup(){

return 'default';

}

}

class u1 extends U{

}

class u2 extends U{

static function getGroup(){

return 'u2';

}

}

class u3 extends u2{

}

print_r(u1::create());

echo '

';

print_r(u3::create());

u1 Object ( [group:U:private] => default )

u3 Object ( [group:U:private] => u2 ),

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:php static延遲靜態(tài)綁定
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)