本篇文章主要给大家介绍PHP编译器BPC6.0的相关知识,聊聊该编译器都更新了哪些新功能,希望对需要的朋友有所帮助!
使用指南:github.com/bob-php-compiler/bpc-re...
简言之,BPC可以将PHP代码最终转译成C语言,然后编译成动态链接库或者可执行程序.
BPC 5.0已经能够成功编译Zend Framework 1和我们公司自己的诸多项目.
但要想更广泛的应用,还缺两个大特性:
namespace
closure
前些天看到nikic/PHP-Parser的文档, 发现PHP的namespace可以很容易地转化.
于是就照着文档写了一个phptobpc.php, 借助这个小程序,可以将使用namespace的PHP代码转为没有namespace的.
当然BPC自身也做了相应的支持,这样动态调用也没问题.比如:
Salin selepas log masuk
我把这个程序打包成phptobpc.phar, 下载回来chmod +x
就能使用.
BPC之前就已经支持简单的匿名函数,比如:
Salin selepas log masuk
BPC 6.0完善了closure实现,支持use,typehint,default value等特性,比如:
Salin selepas log masuk
之前有网友说能不能把 workerman 整个编译起来.
现在支持了 namespace 和 closure, 正好可以编译 workerman 试一试.
由于编译后执行和PHP解释执行还是有一些区别,要想成功编译和运行,需要对workerman的代码做一些微调.
整体来说,调整量很小.感兴趣的可以去查看git commit.
由于 workerman 没有 unit tests, 我们自己也没有 workerman 的项目,所以不好做完整的验证.【推荐学习:php视频教程】
但我照着workerman手册, 写了以下几个例子:
start.php
ws_test.php
tcp_test.php
SimpleChat.php
BinaryTransfer.php
TextTransfer.php
运行起来,测试了一下,没有问题.
start
start -d
stop
restart
status
connections
这些命令都OK.
但是由于编译后只有一个二进制文件,reload
显然是达不到预期效果的.
这几个例子我都静态编译出来了,想动手试一下的直接下载回来gunzip
然后chmod +x
执行即可 (注意只能在ubuntu 18.04上运行).
想自己动手编译的,参看src/Makefile和examples/build.sh
BPC是否开源?
BPC是我们公司的内部项目,不打算开源.
商业化策略还未确定,在正式商业化前,我们每次release都会带一个约7天的试用license,如果过期了还想试用,只要给我们发个邮件我们就会再给license.
如果想要就此项目进行深度合作,可以发邮件到 YnBjQG91cmF0cy5jb20=
BPC 和VKCOM/kphp以及peachpiecompiler/peachpie有什么区别?
BPC的目标是源码保护和软件授权(最终编译为C),在此基础上尽可能和PHP兼容,也就是说,一个php脚本最好什么都不改就能编译成二进制.
kphp的目标是性能(编译为C++),为此,它仅支持limited subset of PHP, 参看KPHP vs PHP differences
peachpie的目标也是性能(编译为C#),同时将.NET引进来了.
BPC 和 Zend Guard, ionCube 以及 Swoole Compiler 有什么区别?
Zend Guard, ionCube和Swoole Compiler都是在PHP opcode的基础上进行源码保护的.
BPC应该来说和它们不是一类东西,只是目标相同罢了,BPC和kphp peachpie算是一类.
PHP官方是否会做编译器?
PHP官方明确不做Native AOT. 参看Ahead of Time Compiler/AOT for PHP8?
Atas ialah kandungan terperinci PHP编译器BPC6.0已发布,聊聊有哪些新功能吧!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!