本篇文章主要给大家介绍PHP编译器BPC6.0的相关知识,聊聊该编译器都更新了哪些新功能,希望对需要的朋友有所帮助!
使用指南: github.com/bob-php-compiler/bpc-re...
简言之,BPC可以将PHP代码最终转译成C语言,然后编译成动态链接库或者可执行程序.
BPC 5.0已经能够成功编译Zend Framework 1和我们公司自己的诸多项目.
但要想更广泛的应用,还缺两个大特性:
namespace
closure
1. 支持 namespace
前些天看到 nikic/PHP-Parser 的 文档, 发现PHP的namespace可以很容易地转化.
于是就照着文档写了一个 phptobpc.php, 借助这个小程序,可以将使用namespace的PHP代码转为没有namespace的.
当然BPC自身也做了相应的支持,这样动态调用也没问题.比如:
<?php $classname = '\\Foo\\Bar\\Baz'; $o = new $classname;
我把这个程序打包成 phptobpc.phar, 下载回来 chmod +x
就能使用.
2. 支持 closure
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) { ... };
3. 成功编译 workerman
之前有网友说能不能把 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
4. 几个常见问题?
-
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와 kphppeakey는 동일한 범주에 속한다고 간주됩니다.
- PHP는 공식적으로 컴파일러를 만들까요?
PHP8용 AOT(Ahead of Time Compiler/AOT)를 참조하세요.
위 내용은 PHP 컴파일러 BPC6.0이 출시되었습니다. 새로운 기능에 대해 이야기해 보겠습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

aphpdectionenceindectioncontainerisatoolthatmanagesclassdependencies, 향상 Codemodularity, testability 및 maintainability.itactAsacentralHubForCreatingAndingDinjectingDingingDingingdecting.

대규모 응용 프로그램의 경우 SELLENCIONINGESS (DI)를 선택하십시오. ServicElocator는 소규모 프로젝트 또는 프로토 타입에 적합합니다. 1) DI는 생성자 주입을 통한 코드의 테스트 가능성과 모듈성을 향상시킵니다. 2) Servicelocator는 센터 등록을 통해 서비스를 얻습니다. 이는 편리하지만 코드 커플 링이 증가 할 수 있습니다.

phPapplicationSCanBeoptimizedForsPeedandefficiencyby : 1) ENABLEOPCACHEINPHP.INI, 2) PREPAREDSTATEMENTSWITHPDOFORDATABASEQUERIES 사용

phpeMailValidationInvoLvestHreesteps : 1) formatValidationUsingRegularexpressionsTochemailformat; 2) dnsValidationToErethedomainHasaValidMxRecord; 3) smtpvalidation, theSTHOROUGHMETHOD, theCheckSiftheCefTHECCECKSOCCONNECTERTETETETETETETWERTETWERTETWER

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

WebStorm Mac 버전
유용한 JavaScript 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기