白話PHP7擴充套件開發之建立物件

2021-09-23 21:52:04 字數 2197 閱讀 9004

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

生孩子第一步,先辦准生證。宣告我要生孩子了。物件建立的時候,如何辦准生證呢?只要定義乙個zend_class_entry變數即可。**如下:

zend_class_entry ce;

zend_class_entry 是啥?可以認為它使乙個原型,定義了一些物件應該有哪些東西組成。具體**可以檢視./zend/zend.**件。

孩子怎麼得有個名字,物件也一樣。如何給物件取名字呢?**如下:

init_class_entry(ce, "children", children_methods);

其中,children就是我們給物件取的名字。那children_methods是啥?它是這個小孩應該具備的能力(物件所擁有的方法)。

孩子出生了,名字有了,下面就得上戶口了。上戶口的過程就是登記入冊的過程。**如下:

zend_class_entry *children_ce;

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_functions =

}

zend_begin_arg_info_ex的最後乙個引數1,是傳遞的引數的個數。

zend_arg_info的第乙個引數0,表示是否傳引用方式傳遞。一般預設為0即可。

至此,我們已經定義了乙個物件,擁有屬性memory和方法learn。完整的**如下:

zend_class_entry *children_ce;

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_functions = }

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擴充套件開發之建立物件

本篇文章主要將如何在擴充套件中建立乙個物件。建立的物件的過程,其實和乙個小孩出生,成長的過程有些類似。生孩子第一步,先辦准生證。宣告我要生孩子了。物件建立的時候,如何辦准生證呢?只要定義乙個zend class entry變數即可。如下 zend class entry ce zend class ...

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擴充套件開發之hello word

原文出處 本文是以php7作為基礎,講解如何從零開始建立乙個php擴充套件。本文主要講解建立乙個擴充套件的基本步驟都有哪些。示例中,我們將實現如下功能 echo say 輸出內容 php test.php hello word 在擴充套件中實現乙個say方法,呼叫say方法後,輸出 hello wo...