PHP7擴充套件開發之類的建立

2021-08-14 12:06:53 字數 2151 閱讀 7253

本篇文章主要將如何在擴充套件中建立乙個物件。建立的物件的過程,其實和乙個小孩出生,成長的過程有些類似。

生孩子第一步,先辦准生證。宣告我要生孩子了。物件建立的時候,如何辦准生證呢?只要定義乙個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 ...