文件大小:
軟件介紹
在php中類的定義以class關(guān)鍵字開(kāi)始,后面接類名,類名可以是任何非PHP保留字的名字。在類名后面緊跟著一對(duì)花括號(hào),類的成員函數(shù)和成員變量定義在這里。類是一種復(fù)合型的結(jié)構(gòu),其需要存儲(chǔ)較多元化的數(shù)據(jù),如屬性,方法,以及自身的一些性質(zhì)。如下一段PHP代碼:
class ParentClass {
}
interface Ifce {
public function iMethod();
}
final class Tipi extends ParentClass implements Ifce{
public static = aaa;
const CA = bbb;
public function __constrct() {
}
public function iMethod() {
}
PRivate function _access() {
}
public static function access() {
}
}這展現(xiàn)了PHP中面向?qū)ο缶幊讨械慕涌?,繼承,靜態(tài)成員變量,靜態(tài)方法,常量,訪問(wèn)控制等內(nèi)容。這些也許已經(jīng)比較熟悉了,那么這些結(jié)構(gòu)在Zend引擎內(nèi)部是如何實(shí)現(xiàn)的?類的這些方法、成員變量是如何存儲(chǔ)的?這些訪問(wèn)控制,靜態(tài)成員是如何標(biāo)記的?
我們?cè)赑HP的源碼中很容易找到類的結(jié)構(gòu)存放在zend_class_entry結(jié)構(gòu)體中:
struct _zend_class_entry {
char type; // 類型:ZEND_INTERNAL_CLASS / ZEND_USER_CLASS
char *name;// 類名稱
zend_uint name_length; // 即sizeof(name) - 1
struct_zend_class_entry *parent; // 繼承的父類
intrefcount; // 引用數(shù)
zend_bool constants_updated;
zend_uint ce_flags; // ZEND_ACC_IMPLICIT_ABSTRACT_CLASS: 類存在abstract方法
// ZEND_ACC_EXPLICIT_ABSTRACT_CLASS: 在類名稱前加了abstract關(guān)鍵字
// ZEND_ACC_FINAL_CLASS
// ZEND_ACC_INTERFACE
HashTable function_table; // 方法
HashTable default_properties; // 默認(rèn)屬性
HashTable properties_info; // 屬性信息
HashTable default_static_members;// 靜態(tài)變量
HashTable *static_members; // type == ZEND_USER_CLASS時(shí),取&default_static_members;
// type == ZEND_INTERAL_CLASS時(shí),設(shè)為NULL
HashTable constants_table; // 常量
struct _zend_function_entry *builtin_functions;// 方法定義入口
union _zend_function *constructor;
union _zend_function *destructor;
union _zend_function *clone;
/* 魔術(shù)方法 */
union _zend_function *__get;
union _zend_function *__set;
union _zend_function *__unset;
union _zend_function *__isset;
union _zend_function *__call;
union _zend_function *__tostring;
union _zend_function *serialize_func;
union _zend_function *unserialize_func;
zend_class_iterator_funcs iterator_funcs;// 迭代
/* 類句柄 */
zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC);
zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object,
intby_ref TSRMLS_DC);
/* 類聲明的接口 */
int(*interface_gets_implemented)(zend_class_entry *iface,
zend_class_entry *class_type TSRMLS_DC);
版權(quán)聲明:
1 本站所有資源(含游戲)均是軟件作者、開(kāi)發(fā)商投稿,任何涉及商業(yè)盈利目的均不得使用,否則產(chǎn)生的一切后果將由您自己承擔(dān)!
2 本站將不對(duì)任何資源負(fù)法律責(zé)任,所有資源請(qǐng)?jiān)谙螺d后24小時(shí)內(nèi)刪除。
3 若有關(guān)在線投稿、無(wú)法下載等問(wèn)題,請(qǐng)與本站客服人員聯(lián)系。
4 如侵犯了您的版權(quán)、商標(biāo)等,請(qǐng)立刻聯(lián)系我們并具體說(shuō)明情況后,本站將盡快處理刪除,聯(lián)系QQ:2499894784
- 千億體育手機(jī)版本v2.0.1 安卓版
- tplink物聯(lián)電腦版(原tplink安防) v2.12.17.
- Sandboxie Plus v1.9.8 / v5.64.8 開(kāi)源電腦
- 字魂100號(hào)方方先鋒體字體包免費(fèi)版
- 奧維互動(dòng)地圖奧維地圖PC破解版VIP V9.0.6
- 蘭博對(duì)戰(zhàn)平臺(tái) V1.38.6 官方最新版 / 蘭博玩
- reWASD(Xbox One手柄映射工具) V6.0.1.5190
- mtool修改器 V2023.11 官方最新版 / mtool
- 115轉(zhuǎn)存助手ui優(yōu)化版腳本 V3.9.1 綠色免費(fèi)
- iSecure Center電腦客戶端 V1.5.0 官方版
點(diǎn)擊加載更多評(píng)論>>