通过Zephir开始PHP扩展开发
>本教程将解释如何使用新语言创建PHP扩展:Zephir,类似于C和Fortran。您可以从GitHub下载完整的源代码。我们之前曾谈到过Zephir的概念,因此,如果您有兴趣获得广泛的概述,请参阅我们以前的文章。 可以将Zephir视为一种混合语言,使您可以编写看起来像PHP的代码,但然后将其编译到本机C,这意味着您可以从中创建扩展名并使用非常有效的代码。
钥匙要点
> Zephir允许PHP开发人员使用类似于PHP的语法编写有效的扩展,但已编译为本机C以增强性能。
- 要建立Zephir开发环境,您需要特定的工具,例如GCC,GNU MAKE,PHP开发标头,RE2C和JSON-C,并建议基于Linux的系统。
在Zephir中创建PHP扩展的过程涉及初始化项目,在.zep文件中编写代码,编译代码并配置您的PHP环境以包括新扩展。
- > Zephir不仅提高了性能,还提供了一种保护源代码的方法,使其适合创建封闭的源PHP应用程序。
- >安装
- 要构建PHP扩展名并使用Zephir,您需要以下内容:
> - gcc> = 4.x/clang> = 3.x/vc 9 >
> JSON-C
>每个平台的安装说明都有所不同,因此,我相信,如果您正在阅读带有类似于此的主题的文章,您会知道如何获得它们。为了记录 - 我建议使用基于Linux的系统开发Zephir应用程序。
- 获得所有先决条件软件后,请从Github下载最新版本的Zephir,然后运行Zephir安装程序,例如:
- 它应该自动安装 - 尝试键入Zephir帮助。如果不起作用,请将“ bin”目录添加到您的路径环境变量中。就我而言:/home/duythien/app/zephir/bin,就像这样:
- >
- 附加以下导出命令: >
- 要验证新路径设置并测试安装,请输入:
- >您可以找到有关Zephir基础知识和语法以及其键入系统的信息,并在其网站上查看一些演示脚本。
编程
>现在,我们将使用Zephir来重新工作C和Fortran很好地处理的数学方程式。这个例子是深奥的,不会被大量解释,除了演示Zephir的力量。用有限差
求解的时间依赖性的Schrodinger方程<span>git clone https://github.com/phalcon/zephir </span><span>cd zephir && ./install -c</span>
首先,发出以下命令来创建扩展名的骨架:
<span>git clone https://github.com/phalcon/zephir </span><span>cd zephir && ./install -c</span>
在“ myApp”文件夹中,创建一个称为“ contenum.zep”的文件(这将为我们提供MyAppquantum名称空间)。在内部复制以下代码:
vi $HOME/.bash_profile
>我们使用了许多PHP函数,例如Fopen(),Sin(),fprintf()等 - 随意研究语法。我还将给你一个例子。在使用Phalcon PHP框架的过程中,如果您在越南人或德语工作,则功能phalcontag :: friendertitle()是无效的。这个示例比上面的方程简单得多,可以创建file normalizechars.zep。将以下代码插入文件:
export PATH=$PATH:/home/duythien/app/zephir/bin
现在,我们需要告诉Zephir必须编译我们的项目,并生成扩展名:
echo $PATH zephir help
首次运行,执行了许多内部命令,生成了必要的代码和配置,以将此类导出到PHP扩展名中。如果一切顺利,您将在输出结束时看到以下消息:
>zephir init myapp
编译…
安装…安装了扩展!添加扩展= myApp.o so到您的php.ini
>
不要忘记重新启动您的Web服务器
>请注意,由于Zephir尚处于起步阶段,因此可以遇到错误和问题。我第一次试图编译它没有用。我尝试了以下命令,并最终使它起作用:
最后一个命令将在PHP扩展文件夹中安装模块(在我的情况下:/usr/lib/php5/20121212/)。最后一步是通过添加以下行添加此扩展名:
myapp/ |-----ext/ |-----myapp/ |-----config.json
>
测试代码namespace Myapp; class Quantum{ const PI = 3.14159265358979323846; const MAX = 751; public function Harmos(double x){ int i,j,n; var psr, psi, p2, v,paramater,fp; double dt,dx,k0,item_psr,item_psi; let dx = 0.02, k0 = 3.0*Myapp\Quantum::PI, dt = dx*dx/4.0; let paramater =[dx,k0,dt,x]; let i = 0, psr = [], psi = [], p2 = [], v = [], fp = []; let fp = fopen ("harmos.txt", "w"); if (!fp) { return false; } while i <= Myapp\Quantum::MAX{ let item_psi = sin(k0*x) / exp(x*x*2.0), item_psr = cos(k0*x) / exp(x*x*2.0); let psr[i] = [item_psr], psi[i] = [item_psi], v[i] = [5.0*x*x], x = x + dx, i++; } var tmp; let i =1, j=1,tmp=[2.0]; for n in range(0, 20000){ for i in range(1,Myapp\Quantum::MAX - 1 ){ let psr[i][3] =psr[i][0] - paramater[2]*(psi[i+1][0] + psi[i - 1][0] - tmp[0]*psi[i][0]) / (paramater[0]*paramater[0]) + paramater[2]*v[i][0]*psi[i][0], p2[i] = psr[i][0]*psr[i][4] + psi[i][0]*psi[i][0]; } for j in range(1,Myapp\Quantum::MAX - 1 ) { let psr[0][5] = 0, psr[Myapp\Quantum::MAX][6]= 0 ; let psi[j][7] = psi[j][0] + paramater[2]*(psr[j+1][8] + psr[j - 1][9] - tmp[0]*psr[j][10]) / (paramater[0]*paramater[0]) - paramater[2]*v[j][0]*psr[j][11]; } //output split if (n ==0 || n % 2000 == 0) { let i =1; while i < Myapp\Quantum::MAX - 1 { fprintf(fp, "%16.8lf %16.8lf %16.8lf \n",i*dx,n*dt,p2[i]); let i = i + 10; } fprintf(fp, "\n"); } // change new->old let j = 1; while j < Myapp\Quantum::MAX - 1 { let psi[j][0] = psi[j][12], psr[j][0] = psr[j][13]; let j++; } } return true; } }
现在,创建一个名为zephir.php的新文件:
>通过访问Zephir.php页面结束。它看起来应该与以下输出相似:
namespace Myapp; class NormalizeChars{ public function trans(var s) { var replace; let replace = [ "ế" : "e", "ề" : "e", "ể" : "e", "ễ" : "e", "ệ" : "e", //--------------------------------E^ "Ế" : "e", "Ề" : "e", "Ể" : "e", "Ễ" : "e", "Ệ" : "e", //--------------------------------e "é" : "e", "è" : "e", "ẻ" : "e", "ẽ" : "e", "ẹ" : "e", "ê" : "e", //--------------------------------E "É" : "e", "È" : "e", "Ẻ" : "e", "Ẽ" : "e", "Ẹ" : "e", "Ê" : "e", //--------------------------------i "í" : "i", "ì" : "i", "ỉ" : "i", "ĩ" : "i", "ị" : "i", //--------------------------------I "Í" : "i", "Ì" : "i", "Ỉ" : "i", "Ĩ" : "i", "Ị" : "i", //--------------------------------o^ "ố" : "o", "ồ" : "o", "ổ" : "o", "ỗ" : "o", "ộ" : "o", //--------------------------------O^ "Ố" : "o", "Ồ" : "o", "Ổ" : "o", "Ô" : "o", "Ộ" : "o", //--------------------------------o* "ớ" : "o", "ờ" : "o", "ở" : "o", "ỡ" : "o", "ợ" : "o", //--------------------------------O* "Ớ" : "o", "Ờ" : "o", "Ở" : "o", "Ỡ" : "o", "Ợ" : "o", //--------------------------------u* "ứ" : "u", "ừ" : "u", "ử" : "u", "ữ" : "u", "ự" : "u", //--------------------------------U* "Ứ" : "u", "Ừ" : "u", "Ử" : "u", "Ữ" : "u", "Ự" : "u", //--------------------------------y "ý" : "y", "ỳ" : "y", "ỷ" : "y", "ỹ" : "y", "ỵ" : "y", //--------------------------------Y "Ý" : "y", "Ỳ" : "y", "Ỷ" : "y", "Ỹ" : "y", "Ỵ" : "y", //--------------------------------DD "Đ" : "d", "đ" : "d", //--------------------------------o "ó" : "o", "ò" : "o", "ỏ" : "o", "õ" : "o", "ọ" : "o", "ô" : "o", "ơ" : "o", //--------------------------------O "Ó" : "o", "Ò" : "o", "Ỏ" : "o", "Õ" : "o", "Ọ" : "o", "Ô" : "o", "Ơ" : "o", //--------------------------------u "ú" : "u", "ù" : "u", "ủ" : "u", "ũ" : "u", "ụ" : "u", "ư" : "u", //--------------------------------U "Ú" : "u", "Ù" : "u", "Ủ" : "u", "Ũ" : "u", "Ụ" : "u", "Ư" : "u", //--------------------------------a^ "ấ" : "a", "ầ" : "a", "ẩ" : "a", "ẫ" : "a", "ậ" : "a", //--------------------------------A^ "Ấ" : "a", "Ầ" : "a", "Ẩ" : "a", "Ẫ" : "a", "Ậ" : "a", //--------------------------------a( "ắ" : "a", "ằ" : "a", "ẳ" : "a", "ẵ" : "a", "ặ" : "a", //--------------------------------A( "Ắ" : "a", "Ằ" : "a", "Ẳ" : "a", "Ẵ" : "a", "Ặ" : "a", //--------------------------------A "Á" : "a", "À" : "a", "Ả" : "a", "Ã" : "a", "Ạ" : "a", "Â" : "a", "Ă" : "a", //--------------------------------a "ả" : "a", "ã" : "a", "ạ" : "a", "â" : "a", "ă" : "a", "à" : "a", "á" : "a"]; return strtr(s, replace); } }
如果您在数学上倾斜,请安装gnuplot并使用我们从Zephir扩展程序中获得的.txt输出运行:
此命令将使用数据文件harmos.txt绘制图像,这看起来像这样,证明我们的方程式是正确计算的。
cd myapp zephir build
>受保护的代码
在某些情况下,汇编并不能显着提高性能,也许是因为应用程序的I/O界限(很可能),而不是由于计算或内存的限制。但是,编译代码还可以为您的应用程序带来一定程度的智力保护。使用Zephir生产本机二进制文件时,您也可以向用户或客户隐藏代码 - Zephir允许您编写封闭的源PHP应用程序。
结论>本文提供了有关如何在Zephir中创建扩展的基本指南。请记住,Zephir并非是为了替换PHP或C的创建,而是作为对他们的补充,使开发人员可以冒险进行代码编译和静态键入。 Zephir是一种尝试加入C和PHP世界中最好的东西,并使应用程序运行速度更快,因此与HHVM和Hack竞争。
有关Zephir的更多信息,请查看在线文档。您喜欢这篇文章吗?在评论中让我知道!
>经常询问有关PHP扩展开发的问题
什么是Zephir,为什么它用于PHP扩展开发?> Zephir是一种高级的开源编程语言,旨在轻松有效地创建PHP扩展。它用于PHP扩展开发中,因为它提供了类似于PHP的语法,使PHP开发人员更容易编写扩展名,而无需学习C的复杂性,该语言通常用于PHP扩展。 Zephir还提供内存安全性和性能优化,使得结果扩展更加可靠,更快。
>如何安装Zephir?
安装Zephir,您需要克隆Zephir Repository从Github克隆到您的本地机器。克隆后,导航到克隆目录并运行安装命令。重要的是要注意,Zephir需要某些依赖项,例如PHP开发标头和C编译器。在开始安装过程之前,请确保安装它们。
如何使用Zephir?
使用Zephir创建PHP扩展名,涉及多个步骤。首先,您需要使用init命令初始化Zephir项目。这为您的扩展创建了目录结构。接下来,您在.zep文件中编写扩展代码。准备好代码后,您可以使用Compile命令将其编译为PHP扩展名。最后,您需要将扩展名添加到php.ini文件中才能启用它。
>>使用Zephir而不是C进行PHP扩展开发的好处是什么?
,而C是一种强大的语言,它可能是复杂且难以使用的,尤其是对于不熟悉它的开发人员而言。另一方面,Zephir为PHP开发人员提供了更简单,更熟悉的语法。它还可以自动处理内存管理,从而降低了内存泄漏的风险。此外,Zephir还包括可以使生成的扩展程序运行速度更快的性能优化。
>我可以使用Zephir为其他语言编写其他语言的扩展名,而不是PHP?
当前,Zephir专门设计用于创建PHP扩展。但是,其开发人员对将来对其他语言的支持表示兴趣。目前,如果要为其他语言创建扩展,则需要使用其他工具或语言。>
>我如何调试Zephir扩展名?>可以调试Zephir扩展程序使用各种工具完成了。一种常见的方法是使用Zephir Parser扩展名,该扩展程序提供详细的错误消息,并可以帮助您确定代码中的问题。您还可以使用标准的PHP调试工具,例如Xdebug,尽管这些工具可能无法为Zephir特定问题提供那么多细节。
>>与本机PHP代码相比,Zephir的性能是什么?设计为高效,在许多情况下,用Zephir编写的扩展可以比等效的PHP代码更快。这是因为Zephir将其编译为C,这是一种低级语言,计算机可以更快地执行。但是,确切的性能差异可能会因特定代码以及如何使用而有所不同。欢迎来自社区。如果您有兴趣做出贡献,可以在Github上查看该项目,以查看当前有哪些问题以及需要哪些帮助。
>有任何学习Zephir的资源?是学习Zephir的几种资源。 Zephir官方文档是一个很好的起点,为语言的功能和用法提供了全面的指南。还有几个在线可用的教程和博客文章,可以提供其他见解和示例。 PHP应用程序的关键部分。当需要与C库接口时,也可以使用它,因为Zephir可以用作PHP和C之间的桥梁。此外,Zephir可用于将复杂的业务逻辑封装在PHP扩展中,为应用程序提供了一个干净,高效的接口代码。
以上是通过Zephir开始PHP扩展开发的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...
