<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[Zephir－－最简单的php扩展开发工具]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 18 Apr 2016 06:32:51 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：写PHP扩展很麻烦，有用c写也有用c++写都麻烦，且难调错，有没有没一个框架实现，从框架看也就是输入和输出，以字符串char*传入，json输出，就很简单了，这儿介绍一个：Zephir提供了一种类似php的高级语言语法的方式，来自动生成扩展的c语言代码，使编写php扩展变得非常的简单。<br/><br/>php的扩展是用c语言编写，Zend是语言引擎，PHP内核。在实际编写php扩展的时候，需要使用大量的Zend Api，虽然运行效率高，但是其实难度也比较大。见：http://php.net/manual/zh/internals2.ze1.zendapi.php<br/><br/>Zephir提供了一种类似php的高级语言语法的方式，来自动生成扩展的c语言代码，使编写php扩展变得非常的简单。<br/><br/>官网：http://www.zephir-lang.com/<br/>官方的安装教程：http://www.zephir-lang.com/welcome.html<br/>ubuntu下需要安装相关的依赖<br/><br/>$ sudo apt-get update<br/>$ sudo apt-get install git gcc make re2c php5 php5-json php5-dev libpcre3-dev<br/>当然别的平台根据实际提示，安装对应的程序即可<br/><br/>$ git clone https://github.com/phalcon/zephir<br/>$ cd zephir<br/>$ ./install-json<br/>$ ./install -c<br/>测试安装是否成功<br/><br/>$ zephir help<br/>使用示例如下：<br/><br/>$ zephir init utils<br/>会在当前目录下生成<br/><br/>ext/ utils/ config.json<br/>然后编辑utils子目录下的greeting.zep 内容如下：<br/><br/> namespace Utils;<br/><br/> class Greeting<br/> &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; public static function say()<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var a = &quot;hello world&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo strtoupper(a);<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/> &#125;<br/>这里的namespace是必须添加的，输出大写的&quot;hello,world&quot;。可以直接使用php的内置函数。<br/>然后运行<br/><br/>$ zephir build<br/>然后就会在扩展目录下生成utils.so，修改php.ini添加添加该扩展。调用方法：<br/><br/>&lt;?php<br/><br/>echo Utils&#92;Greeting::say(), &quot;&#92;n&quot;;<br/>扩展阅读：<br/>zephir生成的c语言文件默认在/ext/utils/greeting.zep.c，核心内容如下：<br/><br/>PHP_METHOD(Utils_Greeting, say) &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;zval *a, *_0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ZEPHIR_MM_GROW();<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZEPHIR_INIT_VAR(a);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZVAL_STRING(a, &quot;hello world&quot;, 1);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ZEPHIR_INIT_VAR(_0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;zephir_fast_strtoupper(_0, a);<br/>&nbsp;&nbsp;&nbsp;&nbsp;zend_print_zval(_0, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ZEPHIR_MM_RESTORE();<br/><br/>&#125;<br/>可以发现zephir一方面直接zend api 如：zend_print_zval。另一方面封装了zend api，如：zephir_fast_strtoupper 。直接修改该文件的c代码，使用原php扩展的编辑方法也是可以滴。<br/><br/>From:https://segmentfault.com/a/1190000002812601
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] Zephir－－最简单的php扩展开发工具]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>