background image

 
function self_concat($string, $n)

{

$result = "";

for ($i = 0; $i < $n; $i++) {

$result .= $string;

}

return $result;

}

 
self_concat("One", 3) returns "OneOneOne".

self_concat("One", 1) returns "One".

 
假设由于一些奇怪的原因,你需要时常调用这个函数,而且还要传给函数很长的字符串和
大值

n。这意味着在脚本里有相当巨大的字符串连接量和内存重新分配过程,以至显著地降

低脚本执行速度。如果有一个函数能够更快地分配大量且足够的内存来存放结果字符串,然
后把

$string 重复 n 次,就不需要在每次循环迭代中分配内存。

为扩展建立函数的第一步是写一个函数定义文件,该函数定义文件定义了扩展对外提供的
函数原形。该例中,定义函数只有一行函数原形

self_concat() :

 
string self_concat(string str, int n)

 
函数定义文件的一般格式是一个函数一行。你可以定义可选参数和使用大量的

PHP 类型,

包括

: bool, float, int, array 等。

保存为

myfunctions.def 文件至 PHP 原代码目录树下。

该是通过扩展骨架

(skeleton)构造器运行函数定义文件的时机了。该构造器脚本叫 ext_skel,

放在

PHP 原代码目录树的 ext/目录下(PHP 原码主目录下的 README.EXT_SKEL 提供了

更多的信息)。假设你把函数定义保存在一个叫做

myfunctions.def 的文件里,而且你希望把