這次,我們來看看字串在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_val
zstr_len
zstr_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...