使用 Zephir 輕鬆構建 PHP 擴展

file

簡介:

經過 PHP 擴展, 咱們能夠在 php 代碼中使用一些特定的方法(大部分的 php 擴展都是用 C 寫的)。php

好比,在 PHP 中須要與 SQLite3 交互,咱們能夠本身寫方法與之進行鏈接,再寫 SQL 語句請求數據。然而,這都是些既瑣碎又重複度至關高的工做,所以,全部開發者對插件的需求呼之欲出。laravel

如今,這款插件已經誕生了。你只需像安裝其餘擴展同樣進行安裝,而後在 'php.ini' 文件執行 'extension=sqllite3.so',就能夠在你的 php 項目裏對 sqlite3 進行訪問了。git

你該安裝的第一個擴展

Zephir:

官網文檔給出的定義是:程序員

一種開源的高級語言,旨在簡化 PHP 擴展的建立和可維護性,重點關注類型和內存安全性。github

特色:sql

  • 類型:動態 / 靜態。
  • 內存安全性:不容許指針或者直接內存管理。
  • 編譯模式:提早編譯。
  • 內存模型:本地任務垃圾回收機制。

工做原理?編程

把你寫好的 php 代碼編譯成 c,而後你能夠將其以擴展的形式添加到 'php.ini' 文件中。json

下面是編譯方案的例子:安全

file

編譯方案bash

  • 讓咱們從 Hello world 的擴展開始吧。

file

Zephir 安裝

配置要求 :

  • gcc >= 4.x/clang >= 3.x
  • re2c 0.13 or later
  • gnu make 3.81 or later
  • autoconf 2.31 or later
  • automake 1.14 or later
  • libpcre3
  • php development headers and tools
  • re2c
  • php-zephir-parser

若是你是用 Ubuntu, 能夠採起以下方式安裝:

sudo apt-get update
sudo apt-get install git gcc make re2c php7.0 php7.0-json php7.0-dev libpcre3-dev
複製代碼

參考下圖命令,確認安裝了較新的 PHP 版本:

file

參考下圖命令,確認有 PHP 開發庫:

file

而後

git clone https://github.com/phalcon/zephir
複製代碼

cd zephir

./install -c
複製代碼

驗證是否安裝正確:

zephir help
複製代碼

若是一切就緒,你應該能在你的屏幕上看到如下幫助信息:

file

擴展初始化:

zephir init helloworld

而後,一個名字爲 「helloworld」 的目錄在當前工做目錄中被建立:

file

擴展目錄結構:

  • ext: 包含被編譯器用來生成擴展的代碼。
  • helloworld: 這個目錄與咱們的擴展同名。咱們在這個目錄中放置 Zephir 代碼。
  • config.json: 這個文件包含咱們可用於更改 Zephir 與/或此擴展的行爲的配置

添加咱們的第一個類:

在 helloworld 目錄中 .

Zephir 的設計初衷是用來生成面對對象的擴展,接下來咱們先添加一個初始類。

咱們先來在擴展中建立一個 helloworld 類,使用此類來渲染 Hello World!

helloworld/helloworld/greeting.zep

namespace HelloWorld;

class Greeting
{

	public static function say()
	{
		echo "Hello World!";
	}
}
複製代碼

接下來命令行執行如下命令來編譯擴展:

zephir build
複製代碼

第一次運行以上命令時,會初始化一些東西。若是一些順利的話,會輸出如下內容:

file

zephir build output
複製代碼

檢測下是否安裝成功:

file

在 PHP 代碼中測試:

zephir_helloworld.php

<?php
echo HelloWorld\Greeting::say()."\n";
複製代碼

接下來運行命令:

php zephir_helloworld.php
複製代碼

你能夠能夠看到輸出 Hello World!

結語

若是你是 PHP 軟件工程師,對內存管理等底層語言的編程方式不是特別熟悉,能夠嘗試從 Zephir 開始寫一些簡單的擴展。

Zephir 內部已經作好了內存管理,可是基於其內存安全的設計,你沒法使用 C 語言的強大手動內存管理功能,若是你是 C 程序員,你會以爲 Zephir 更加簡單易用,可是在有些地方可能不夠強大。

文章轉自:learnku.com/php/t/25350
更多文章:learnku.com/laravel/c/t…

相關文章
相關標籤/搜索