php static延遲靜態(tài)綁定
來源:易賢網(wǎng) 閱讀:1499 次 日期: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();

}

}

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

我不想在每個子類中添加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做了一個假設。

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

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

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

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

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

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

abstract class U{

public static function create(){

return new static();

}

}

class u1 extends U{

}

class u2 extends U{

}

u1::create();

static不僅可以用于實例化,和self,parent一樣還可以作為靜態(tài)方法的調(dià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技術專欄

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:php static延遲靜態(tài)綁定

2025國考·省考課程試聽報名

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