PHP7擴充套件開發之字串處理

2021-09-23 17:47:48 字數 1526 閱讀 8234

這次,我們來看看字串在php擴充套件裡面如何處理。

示例**如下:

<?php

function str_concat($prefix, $string) else

}echo str_concat("hello", "word");

echo "\n";

echo str_concat("hello", "hello bo56.com");

echo "\n";

?>

上面的str_concat方法實現了如下功能:

1、當字串不包含指定字首字串時,把字首字串和被檢測字元合併返回。

2、當字串包含指定字首字串時,原樣返回。

我們將使用php擴充套件的方式實現str_concat功能。

str_concat方法的php擴充套件原始碼:

php_function(str_concat)

subject = zval_get_string(string);

if (zend_binary_strncmp(zstr_val(prefix), zstr_len(prefix), zstr_val(subject), zstr_len(subject), zstr_len(prefix)) == 0)

result = strpprintf(0, "%s %s", zstr_val(prefix), zstr_val(subject));

return_str(result);

}

zend_string是php7新增的結構。結構如下:

struct _zend_string ;
zend/zend_string.h提供了一些zend_string處理的一些方法。

zstr_開頭的巨集方法是zend_string結構專屬的方法。主要有如下幾個:

#define zstr_val(zstr)  (zstr)->val

#define zstr_len(zstr) (zstr)->len

#define zstr_h(zstr) (zstr)->h

#define zstr_hash(zstr) zend_string_hash_val(zstr)

zstr_valzstr_lenzstr_h巨集方法分別對應zend_string結構的成員。zstr_hash是獲取字串的hash值,如果不存在,就呼叫hash函式生成乙個。

**中故意把第二個引數轉換成zval。主要是為了展現zend為我們提供了一些列的操作方法。如,zval_get_string, zend_binary_strncmp。

這些方法在zend/zend_operators.h檔案中。

更多巨集方法請檢視 zend/zend_api.h中的相關**。

更多函式說明請檢視

PHP7擴充套件開發之hello word

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

PHP7擴充套件開發之hello word

echo say 輸出內容 php test.php hello word在擴充套件中實現乙個say方法,呼叫say方法後,輸出 hello word。php為我們提供了生成基本 的工具 ext skel。這個工具在php源 的.ext目錄下。cd php src ext ext skel extn...

PHP7擴充套件開發之hello word

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