Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
1
篇与
的结果
2023-08-08
用Zephir编写PHP扩展
用Zephir编写PHP扩展自从NodeJS,和Golang出来后,很多人都投奔过去了。不为什么,冲着那牛X的性能。那PHP的性能什么时候能提升一下呢?要不然就会被人鄙视了。其实大牛们也深刻体会到了这些威胁,于是都在秘密开发各种秘密武器。HHVM和HackFacebook自己弄了一套HHVM虚拟机,和一个新语言Hack。HHVM的性能不错,像Wordpress,PHPMyAdmin这样的项目,运行在上面很流畅,但是有个问题很致命,如果你引入了第三方扩展,现有的代码移植过去,没办法运行。如果你希望你的代码运行于HHVM,那么你需要编写基于HHVM的扩展,这时候你要学习C++了。很抓狂有木有?又或者,用Hack重写你的代码,这事谁会干呢?新项目可能可以拿来玩玩,但是旧的项目,如果代码量大,且代码混乱的项目,那就只能呵呵了。PHPNG(next generation)前些日子PHP核心开发组宣布了个利好消息,将在PHP 5.7版本会有很大的性能提升。这一次又打击到HHVM了。但是要等到5.7的版本才会发布。现在很多都只是停留在5.4的版本,鞭长莫及啊。除了这些,就没有办法提升性能了吗?有!------ PHP扩展。Phalcon没听过,Yaf总听过了吧。什么?都没听过?赶紧去Google下,听说面试会加分。PHP扩展PHP的流行,得益于它的扩展系统。开发者通过为PHP开发扩展,通过这个中间件,跟其他系统连接通信。例如我们常用的cURL,Memcache和Redis等扩展。这些扩展不包含在PHP核心,需要额外编译。这里有一份官方列出的PHP扩展列表:http://www.php.net/manual/en/extensions.alphabetical.php如果你想自己编写PHP扩展,意味着你需要掌握C语言,因为PHP的扩展是通过C编写的,而且你还需要掌握PHP的Zend API,了解它的核心原理。如果你有兴趣,可以参考:《深入理解PHP内核》。如果你懂C,那么你看完上面这本书,那么你大概也能写了。但是,对于C语言水平比较菜,或者不怎么懂C的人来说,就只能望而却步了。为什么我要写PHP扩展呢?访问现有的库。假设现在有一个库很好用(例如MongoDB),你希望在PHP也能用上它。如果这个库很热门,那么你就走运了,应该有大牛帮你实现了。要是运气不好,这个库比较冷门,但你业务需求又刚好需要用到的话,那只能干着急了(当然这种情况是极少出现的)。性能。PHP是动态语言,代码性能比C语言相差一个级别。正是由于此原因,产生了Yaf,Phalcon这样的PHP的扩展框架。对于那些不想学C,但又想要得到编写自己的扩展,怎么办?Zephir分析了以上的种种不靠谱,终于进入了正题。现在隆重向你介绍一个叫Zephir的项目。它可以帮助你使用类PHP的语法,来生成C语言代码,并帮助你编译成PHP扩展。是不是很酷?很酷,有没有?Show Me The Code如果你用C写一个Hello World的扩展,那么你需要这样写:ifdef HAVE_CONFIG_Hinclude "config.h"endifinclude "php.h"include "php_test.h"include "test.h"include "kernel/main.h"/**This is a sample class */ZEPHIR_INIT_CLASS(Test_Hello) {ZEPHIR_REGISTER_CLASS(Test, Hello, hello, test_hello_method_entry, 0); return SUCCESS;}/**This is a sample method */PHP_METHOD(Test_Hello, say) {php_printf("%s", "Hello World!");}而Zephir则只需要这样:01.namespace Test;02.03./**04.* This is a sample class05.*/06.class Hello07.{08./**09.* This is a sample method10.*/11.public function say()12.{13.echo "Hello World!";14.}15.}是不是跟写PHP代码没什么区别?安装 Zephir1.$ git clone https://github.com/json-c/json-c.git2.$ cd json-c3.$ sh autogen.sh4.$ ./configure5.$ make && sudo make install1.$ git clone https://github.com/phalcon/zephir2.$ cd zephir3.$ ./install -c安装完成后,运行1.$ zephir help如果没有报错,说明你已经安装成功了。Zephir语法Zephir跟PHP有几点区别:Zephir是强类型语言。变量有自己的类型。01.namespace Test;02.03.class Arithmetic04.{05.public function intSum()06.{07.int a, b, c;08.09.let a = 1,10.b = 2,11.c = a + b;12.13.return c;14.}15.}这里需要特别注意的是Zephir有个let关键字,用于变量赋值。编译扩展初始化一个Zephir扩展1.zephir init myframework新建一个叫 calculator.zep的文件1.namespace Myframework;2.class Calculator {3.public function add(int a, int b) {4.return a + b;5.}6.}Zephir必须指定一个命名空间,上面的例子Myframework为这次Demo的命名空间。Zephir遵循PSR-1的标准进行命名。把Zephir代码编译成PHP的C扩展1.zephir build开启扩展在你的php.ini文件加上1.extension=myframework.so测试1.$ php -a2.php > $calc = new Myframework\Calculator;3.php > var_dump($calc->add(2, 1));4.int(3)是不是很简单?你也来尝试一下吧。用Zephir开发PHP扩展
2023年08月08日
24 阅读
0 评论
0 点赞