Zephir还有这本手册,是为了PHP开发者想开发C扩展并下降复杂度面打算的。php
咱们假设你有编程语言的基础。咱们会在介绍的时候尽量的向PHP,C,Javascript等语言的特色来陈述。 若是你懂得这些语言中的某一种的话,咱们会指出它们来Zephir的类似点。固然其它的一些Zephir的新特性还有 不一样点咱们也会一一介绍。git
若是你成功的安装了Zephir,你能够在命令行中执行下面的命令:github
$ zephir help
若是安装正确的话,你会看到下面的提示:web
_____ __ _ /__ / ___ ____ / /_ (_)____ / / / _ \/ __ \/ __ \/ / ___/ / /__/ __/ /_/ / / / / / / /____/\___/ .___/_/ /_/_/_/ /_/ Zephir version 0.4.5a Usage: command [options]Available commands: build Generate/Compile/Install a Zephir extension clean Cleans the generated object files in compilation compile Compile a Zephir extension full-clean Cleans the generated object files in compilation generate Generates C code from the Zephir code help Displays this help init [namespace] Initializes a Zephir extension install Installs the extension (requires root password) version Shows Zephir version
首先咱们要作的是创建一个基础的项目结构,它为咱们开发扩展提供了基本的结构。这里,咱们创建了一个扩展叫作"utils":编程
$ zephir init utils
执行上面的命令后,一个名为"utils"的目录被创建在当前的目录下:json
utils/ ext/ utils/
目录 "ext/" (inside utils) 包含了编译器将会用到来编译扩展的代码. 另外一个目录是"utils",这个目录的名字必需要和咱们的扩展名字保持一至。咱们写的Zephir代码将会被放到这里。session
We need to change the working directory to "utils" to start compiling our code:框架
$ cd utils$ ls ext/ utils/ config.json
列出的目录中,还有一个文件叫作"config.json",这个文件包括了一些配置,它能够用来改变Zephir和扩展的行为。编程语言
Zephir是被设计成开发面向对象扩展的。为了开发出咱们的第一个功能,咱们增长一个类到扩展中。ide
就像不少工具和语言同样,第一件事就是去写"hello world"。同时也检测Zephir是否是能够正常运做。 因此咱们的第一个类就叫做"Utils\Greeting",它包含了一个函数,这个函数会打印出"hello world!"。
The code for this class must be placed in "utils/utils/greeting.zep":
namespace Utils;class Greeting{ public static function say() { echo "hello world!"; }}
下面开始编译并生成扩展:
$ zephir build
首先,只会在第一次执行的时候,大量的内部命令被执行,并产生了一些必要的代码和配置文件,最终把这个类生成PHP的扩展。 若是一切顺利的话,你将会看到:
...Extension installed!Add extension=utils.so to your php.iniDon't forget to restart your web server
在上面的步骤中,你可能须要提供你的root账号和密码去安装这个扩展。 最后,这个扩展必须增长到php.ini文件中,以便PHP能够加载它: extension=utils.so
如今这个扩展已经增长到php.ini文件中了,执行下面的命令来确认扩展是否已经正确的加载进来了:
$ php -m[PHP Modules]Core date libxml pcre Reflection session SPL standard tokenizer utils xdebug xml
扩展utils必需要出如今上面的列表中。那么如今,咱们尝试在PHP中运行这个hello world扩展。 为了完成这个测试,咱们写了一个简单的PHP代码来执行扩展中的静态函数:
<?phpecho Utils\Greeting::say(), "\n";
恭喜!,你已经完成你的第一个PHP扩展了。
"hello world"这个类的扩展是用来检测咱们的不幸是否正确的。如今,让咱们创建一些其它更有用处的类。
第一个有用的类咱们将要增长到PHP扩展中将会提供一个过滤工具给用户。 这个类就叫作"Utils\Filter",这个类的代码必需要放在"utils/utils/filter.zep"中:
这个类的基本的框架以下:
namespace Utils;class Filter{}
这个类包含了一个函数,这个函数的做用是帮助用户去过滤一些不合法的字符。 第一个函数叫作"alpha",它的目标就是去过滤非ascii码的字符。 开始,咱们只是简单的打印出字符串的每个字节:
namespace Utils;class Filter{ public function alpha(string str) { char ch; for ch in str { echo ch, "\n"; } }}
当调用这个函数的时候:
<?php$f = new Utils\Filter();$f->alpha("hello");
You will see:
h e l l o
检查字符串中的每个字符是一个直接了当的方法,如今咱们创建另外一个正确过滤字符的函数:
class Filter{ public function alpha(string str) -> string { char ch; string filtered = ""; for ch in str { if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') { let filtered .= ch; } } return filtered; }}
这个写好的函数能够像刚才同样测试:
<?php$f = new Utils\Filter();echo $f->alpha("!he#02l3'121lo."); // prints "hello"
下面的视频演示了上面的这些过程:
这是一个简单的指导教程,可是正如你所见到的,使用Zephir你能够很容易的创建一个PHP扩展。 咱们建议你继续阅读这个手册,以便你能够了解更多Zephir的特性。