本篇文章主要將如何在擴充套件中建立乙個物件。建立的物件的過程,其實和乙個小孩出生,成長的過程有些類似。
生孩子第一步,先辦准生證。宣告我要生孩子了。物件建立的時候,如何辦准生證呢?只要定義乙個zend_class_entry變數即可。**如下:
zend_class_entry ce;
zend_class_entry 是啥?可以認為它使乙個原型,定義了一些物件應該有哪些東西組成。具體**可以檢視./zend/zend.h檔案。
孩子怎麼得有個名字,物件也一樣。如何給物件取名字呢?**如下:
init_class_entry(ce, "children", children_methods);
其中,children就是我們給物件取的名字。那children_methods是啥?它是這個小孩應該具備的能力(物件所擁有的方法)。
孩子出生了,名字有了,下面就得上戶口了。上戶口的過程就是登記入冊的過程。**如下:
children_ce =zend_register_internal_class(&ce);
zend_register_internal_class方法會返回乙個zend_class_entry指標。以後我們對這個物件的操作,可以使用這個指標。
孩子已經上戶口了。接下來,我們就是認真的培養他。培養成對社會有用的人。那麼如何培養呢?主要從兩方面入手。第一方面是教授知識(定義屬性),另一方面是培養其行為能力(定義方法)。
定義屬性,我們使用zend_declare_property*系列方法。**示例如下:
zend_declare_property_null(children_ce, "memory", sizeof("memory") - 1, zend_acc_public);
上面的**我們就宣告了乙個名稱為memory的屬性,並且設定訪問型別為 public。
定義方法的過程更簡單。還記得我們在上戶口的時候,登記了children_methods。這個就是孩子行為的乙個集合。這個行為集合如何產生的呢?**如下:
zend_begin_arg_info_ex(arginfo_children_learn, 0, 0, 1)
zend_arg_info(0, love)
zend_end_arg_info()
php_method(children, learn);
const zend_function_entry children_methods =
}
zend_begin_arg_info_ex的最後乙個引數1,是傳遞的引數的個數。
zend_arg_info的第乙個引數0,表示是否傳引用方式傳遞。一般預設為0即可。
至此,我們已經定義了乙個物件,擁有屬性memory和方法learn。完整的**如下:
zend_class_entry *children_ce;
php_method(children, learn);
zend_begin_arg_info_ex(arginfo_children_learn, 0, 0, 1)
zend_arg_info(0, love)
zend_end_arg_info()
const zend_function_entry children_methods =
}php_minit_function(children)
php_method(children, learn)
zend_update_property_string(children_ce, getthis(), "memory", sizeof("memory") - 1, love);
}
<?php
$children = new children();
var_dump($children->memory);
$children->learn("love");
var_dump($children->memory);
?>
輸出內容如下:
null
string(4) "love"
PHP7擴充套件開發之建立變數
在這篇博文中我們將演示如何在php擴充套件中建立乙個變數。示例 如下 class demo lng 2 str abc arr array 1,a b obj new demo var dump str var dump arr var dump obj 中間的三行我們將用php擴充套件來實現。de...
PHP7擴充套件開發入門
我們可以在ext目錄下看到所有的php原生擴充套件,其中包括了熟悉的curl,json,mbstring,xml,sockets等擴充套件,還有很多沒有用過甚至沒有聽說過的擴充套件,不用在意這些,我們先開啟我們最熟悉的curl來看看,有config.m4配置檔案,有php curl.h,curl f...
白話PHP7擴充套件開發之建立物件
本篇文章主要將如何在擴充套件中建立乙個物件。建立的物件的過程,其實和乙個小孩出生,成長的過程有些類似。生孩子第一步,先辦准生證。宣告我要生孩子了。物件建立的時候,如何辦准生證呢?只要定義乙個zend class entry變數即可。如下 zend class entry ce zend class ...