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

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

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();

}

}

這段代碼正常工作是沒(méi)問(wèn)題,但大量重復(fù)的代碼會(huì)很煩人

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

abstract class U{

public static function create(){

return new self();

}

}

class u1 extends U{

function a(){}

}

class u2 extends U{

}

u1::create();

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

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

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

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

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

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

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

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)識(shí)符,甚至是從非靜態(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 ),

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

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

2025國(guó)考·省考課程試聽(tīng)報(bào)名

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