PHP

Zephir入门

字號+ 編輯: 种花家 修訂: 种花家 來源: open开发经验库 2023-09-15 我要說兩句(0)

當年php火的時候, 多少内卷大佬巴不得使用c來編譯一手php插件, 從此制霸江湖啊!zephir作爲phalcon框架所生的一個分支語言,給很多想寫php框架又不想看zend API文档的同學們帶來了方便實惠。

Zephir是一個開源的用於簡化PHP擴展的創建和維護的語言。它使得不擅長C/C++的PHP開發人員也能寫出PHP擴展。Zephir是Zend Engine/PHP/Intermediate縮寫,讀音爲zephyr。

Zephir在語法上跟PHP有很多相似之處,PHP開發人員可以很快上手,但也有很多地方上的不同需要我們去學習。下面是Zephir一些主要的特色:

  • 變量類型:動態/靜態

  • 内存安全:不允許指針和直接的内存管理

  • 編譯模型:AOT(ahead of time)

  • 内存模型:task-local垃圾回收

安裝詳解

依賴

要使用Zephir和編譯出一個PHP擴展,需要先安裝以下的依賴:

  • gcc >= 4.x/clang >= 3.x

  • re2c 0.13+

  • gnu make 3.81+

  • autoconf 2.31+

  • automake 1.14+

  • libpcre3

  • php development headers and tools

安裝

這裡選擇使用git的方式獲取源代碼並進行安裝:

bash$ git clone https://github.com/phalcon/zephir
$ cd zephir
$ ./install-json
$ ./install -c

如果已經安裝了json-c,那麽可以忽略./install-json這一步。

驗証

通過運行zephir命令驗証下是否安裝成功:

bash$ zephir help
 _____	      __    _
/__  /  ___  ____  / /_  (_)____
  / /  / _ \/ __ \/ __ \/ / ___/
 / /__/  __/ /_/ / / / / / /
/____/\___/ .___/_/ /_/_/_/
	 /_/
Zephir version 0.7.1b
Usage: 
	command [options]
Available commands:
	stubs	       Generates extension PHP stubs
	install	     Installs the extension (requires root password)
	fullclean	   Cleans the generated object files in compilation
	build	       Generate/Compile/Install a Zephir extension
	generate	    Generates C code from the Zephir code
	clean	       Cleans the generated object files in compilation
	builddev	    Generate/Compile/Install a Zephir extension in development mode
	compile	     Compile a Zephir extension
	version	     Shows the Zephir version
	api [--theme-path=/path][--output-directory=/path][--theme-options={json}|/path]Generates a HTML API
	help		Displays this help
	init [namespace]    Initializes a Zephir extension
Options:
	-f([a-z0-9\-]+)     Enables compiler optimizations
	-fno-([a-z0-9\-]+)  Disables compiler optimizations
	-w([a-z0-9\-]+)     Turns a warning on
	-W([a-z0-9\-]+)     Turns a warning off

我們的第一個擴展

下面我們使用Zephier來創建一個“hello world”擴展。

初始化

首先,我們使用init命令來初始化擴展的基本結搆(假設我們擴展的名稱爲“utils”):

bash$ zephir init utils

成功運行後,我們應該會得到如下的目錄結搆:

bashutils/
   ext/
   utils/

ext目錄裡放的是編譯器需要用到的代碼,不用理會,我們的Zephir代碼將放在跟擴展名同名的utils裡。

編寫代碼

我們在utils目錄下創建一個文件:greeting.zep,並編寫代碼:

phpnamespace Utils;
class Greeting
{
	public static function say()
	{
		echo "hello world!";
	}
}

這裡不深入Zephir的語法,但是可以看到語法跟PHP很類似,上面的代碼定義了一個類Greeting和一個方法say()。

Zephir的語法詳情可以參考官方的文档: http://zephir-lang.com/language.html 。

編譯

接下來,我們回到utils根目錄下並運行build命令編譯出擴展:

bash$ zephir build     
Preparing for PHP compilation...
Preparing configuration file...
Compiling...
Installing...
Extension installed!
Add extension=utils.so to your php.ini
Don't forget to restart your web serverp

編譯成功後,我們在PHP配置文件裡增加以下一行:

iniextension=utils.so

驗証

通過如下命令查看我們的擴展是否正常加載:

bashphp -m
[PHP Modules]
...
memcached
mysql
mysqli
mysqlnd
openssl
utils
...

如果看到我們擴展的名字,則証明已成功加載。

然後我們在PHP裡調用say()方法:

<?php

echo Utils\Greeting::say(), "\n";

正常的話會輸出:hello world!。至此我們也完成了我們的第一個擴展。

參考文档

http://zephir-lang.com/index.html

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • PHP的換行符是什麽

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決

我要說說
網上賓友點評
沙發已空