用PHP寫PHP7擴展,超級簡單對吧!

 【圖片打不開,請用代理】php

介紹:

PHP擴展是編譯庫,它容許在您的PHP代碼中使用特定的功能(主要是使用C編寫的php擴展)。git

例如,您須要使用PHP使用SQLite3,您能夠實現本身的方法和功能來鏈接到Sqlite3,從您的應用程序級別向DB進行查詢,但這不是一項簡單的任務,插件不只是您本身的要求,但其餘開發人員須要作相似的事情。程序員

因此有人開發了它並將其做爲php擴展發送,您能夠安裝此擴展並php.ini使用如下內容啓用它extension=sqllite3.so,而且您能夠經過您的應用程序級別訪問全部sqlite3功能,在這種狀況下是php。github

你的第一次擴展

ZEPHIR:

根據zephir官方文檔,您能夠將其定義以下sql

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

特徵:json

  • 輸入 系統:動態/靜態。
  • 內存安全:不容許使用指針或直接內存管理。
  • 編譯模型:提早。
  • 內存模型:任務本地垃圾收集。

這個怎麼運做 ?canvas

您編寫PHP代碼並將您的代碼編譯爲c擴展名,最後您能夠將其添加到您的php.ini文件中。安全

這是編譯方案的例子:php7

 

編制方案工具

  • 讓咱們以Hello world擴展爲例。
 
 

Zephir安裝

要求 :

  • gcc> = 4.x / clang> = 3.x
  • re2c 0.13或更高版本
  • gnu make 3.81或更高版本
  • autoconf 2.31或更高版本
  • automake 1.14或更高版本
  • libpcre3
  • php開發標題和工具
  • re2c
  • PHP-ZEPHIR解析器

若是您使用的是Ubuntu,則能夠經過如下方式安裝所需的軟件包:

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

因爲Zephir是用PHP編寫的,所以您須要安裝最新版本的PHP 7.2,而且必須在您的控制檯中使用它。

 

此外,請確保您還安裝了PHP開發庫以及PHP安裝。

 

腳步

git clone https://github.com/phalcon/zephir

cd zephir

./install -c

驗證您的安裝

zephir幫助

若是一切順利,您應該在屏幕上看到如下幫助:

 

擴展骨架:

zephir init helloworld

在此以後,在當前工做目錄上建立一個名爲「helloworld」的目錄:

 

擴展目錄結構

  • 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咱們的項目必須編譯並生成擴展:

zephir build

最初,而且只是第一次執行許多內部命令,生成必要的代碼和配置以將此類導出到PHP擴展,若是一切順利,您將在輸出的末尾看到如下消息:

 

zephir構建輸出

安裝驗證:

 

從PHP測試您的擴展:

 
<?php
echo HelloWorld\Greeting::say()."\n";

 

運行如下命令, php zephir_helloworld.php 您的輸出應該是如下Hello World!

結論:

若是你是軟件工程師,php開發人員須要開發和使用php如何工做以及如何構建本身的擴展我建議zephir有一個很是強大的文檔和felxability也是它的內存安全管理。可是因爲它有一些限制,根據如下Zephir被設計爲安全,因此它不實現指針或手動內存管理,因此若是你是一個C程序員,你會以爲Zephir不如C強大但比C更友好。

參考文獻:

相關文章
相關標籤/搜索