本篇文章主要给大家介绍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自身也做了相应的支持,这样动态调用也没问题.比如:
<?php $classname = '\\Foo\\Bar\\Baz'; $o = new $classname;
我把这个程序打包成 phptobpc.phar, 下载回来 chmod +x
就能使用.
BPC之前就已经支持简单的匿名函数,比如:
<?php $a = array(1,2,3); usort($a, function ($a, $b) { ... });
BPC 6.0完善了closure实现,支持use,typehint,default value等特性,比如:
<?php $a = 1;$b = 2; $f = function (array $arg1, &$arg2, $arg3 = 1) use ($a, &$b) { ... };
之前有网友说能不能把 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
Matlamat peachpie juga ialah prestasi (disusun kepada C#), dan .NET diperkenalkan pada masa yang sama.
Apakah perbezaan antara BPC dan Zend Guard, ionCube dan Swoole Compiler?
Zend Guard, ionCube dan Swoole Compiler semuanya melaksanakan perlindungan kod sumber berdasarkan opcode PHP
BPC bukanlah perkara yang sama dengan mereka, tetapi mempunyai matlamat yang sama, BPC dan kphp peachpie berada dalam kategori yang sama.
Adakah PHP secara rasmi akan membuat pengkompil?
PHP secara rasmi melakukannya tidak membuat Native AOT Lihat Ahead of Time Compiler/AOT untuk PHP8?
Atas ialah kandungan terperinci Pengkompil PHP BPC6.0 telah dikeluarkan, mari bercakap tentang ciri baharu!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!