zephir-(1)开篇介绍

时间:2022-04-29
本文章向大家介绍zephir-(1)开篇介绍,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

#zephir-开篇介绍#

##前言## 先在这里感谢各位zephir开源技术提供者

笔者在学习phalcon的过程中了解到,phalcon2.x版本通过了zephir重写,第一感觉是zephir这么牛逼?笔者赶紧尝试了一下,果不其然非常简单的就能写出一个C扩展的helloword,github上面有1000+个Star,紧接着我去搜索了一系列中文资料,但是比较失望,官方也没有提供中文文档,也没有中文社区,这么好东西这么好的技术,笔者觉得不能让他埋没,今天来开个坑,第一是对于官网的文档的一个译文工作,其次是结合自己的理解进行补充,希望大家喜欢!

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:w-blog.cn

zephir官网地址:http://zephir-lang.com/

github地址:https://github.com/phalcon/zephir

##1. zephir介绍##

那么今天的目的是什么,今天的目的不是告诉大家怎么用zephir编写PHP拓展,也不是zephir语法写那要写,中国有句老话千里之行始于足下我们先来简单的了解一下zephir他的特点和特性.

###1.1 简单易于开发###

相信大家和我有一样的经历,看到了yaf和phalcon在想为什么C语言的拓展框架可以这么的快,我自己能不能写一个出来呢,然后屁颠屁颠的跑去找资料找大神了解,大神说你去看一下**"PHP扩展开发及内核应用"**,结果大家都知道醉了,

主要原因是需要对C相对的熟悉并且对PHP内核API也要很熟悉,我觉得这已经不是门槛的问题了是太平洋的距离,就草草结束了研究.

当遇到zephir首先了解的就是复杂程度,结果花了10分钟就跟着流程做了一个小DEMO,就这点看来就开发效率这点看来无可厚非的的高效快速,大家感受一下:

namespace Kenny;

 class Kenny
 {
     public static function hello()
     {
         echo  "hello world";
     }
 }

编译之后引入到php.ini里面,使用方式如下:

use KennryKennry;

echo Kennry::hello(), "/n";

zephir是一个解释器语言和PHP非常近似,通过zephir的机制编译成C语言,然后通过C编译出PHP拓展提供使用,把中间过程高度封装很大程度让PHP拓展开发简单了很多.

"PHP扩展开发及内核应用"地址:http://www.walu.cc/phpbook/

###1.2 zephir特性###

1.zephir是静态动态结合语言,在zephir内可以使用传统静态变量,也可以使用动态变量,灵活度高

2.内存安全,熟悉C程序的童鞋都知道C可以控制内存指针,其实用的不好是一件很危险的事情,zephir它不允许你使用指针,它提供了一个task-local垃圾收集器,以避免内存泄漏。

3.编译模式,zephir能狗编译主流系统Liunx/OSX/Windows能够识别的拓展程序

4.开发源代码的高级语言,以面向对象为基础,编写拓展都需要基于面向对象

###1.3 感受一下###

下面是官方提供的一个让大家感受一下的小例子作用是过滤变量返回字母字符

namespace MyLibrary;

class Filter
{
    public function alpha(string str)
    {
        char ch; string filtered = "";
        for ch in str {
           if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
              let filtered .= ch;
           }
        }
        return filtered;
    }
}

从PHP类可以使用如下:

<?php

$filter = new MyLibraryFilter();
echo $filter->alpha("01he#l.lo?/1"); // 结果输出 hello

##2 为什么是Zephir##

今天的PHP应用程序必须平衡一系列问题包括稳定性、性能和功能。

每一个PHP应用程序是基于一组常见的组件或者说框架,这些公共组件是库/框架或它们的组合。一旦安装后很少改变,作为应用程序的基础,他们必须是有非常快的,

快速和强大的库会很复杂,由于高水平的抽象,一般的做法是约定基础库或框架很少改变,才有机会来改善性能和资源消耗

Zephir,您可以实现面向对象库/框架/应用程序,使您的应用程序速度提高,改善用户体验。

###2.1 如果你是一个PHP程序员…… ###

PHP是在使用的Web应用程序开发中最流行的语言之一。像PHP动态类型和解释语言,由于其灵活性,提供非常高的效率。

由于4,然后第5版,PHP是基于Zend引擎的实现。这是执行从字节码表示的PHP代码的虚拟机。Zend引擎是世界上每一个PHP的安装几乎目前,随着ZEPHIR,您可以创建在Zend引擎运行PHP扩展。

PHP托管ZEPHIR,所以他们显然有很多相似的地方,但是,他们有给ZEPHIR自己的个性的重要差异。例如,ZEPHIR更加严格,它可以让你减少编译步骤。

###2.2 如果你是一个C程序员…… ###

C是有史以来最强大的和流行的语言之一。 事实上,PHP是用C编写的, 这是PHP扩展的原因之一是可用的。 给你的自由 管理内存,使用低级别类型甚至内联汇编程序。

然而,用C开发大型应用程序可以把PHP或Zephir相比比预期的要长很多 一些错误是很难找到如果你不是一个有经验的开发人员。

Zephir设计是安全的,所以它没有实现指针或手动内存管理, 如果你是一个C程序员,你会觉得Zephir强大但更友好比C。

###2.3 编译VS解读###

编译通常会减慢下来的发展; 你需要多一点耐心,使你的代码编译运行它之前。此外,该解释趋于降低有利于生产率的性能

为了更高的效率,Zephir需要编译你的代码,但是他不会影响高生产效率,开发人员可以决定哪些应用程序的部分应当在ZEPHIR,哪些不是。

###2.4 静态类型和动态类型语言###

一般来说,在静态类型语言中,变量是绑定到一个特定类型的一生。 其类型不能改变,只能参考实例和兼容操作。 像C / c++语言实现的方案:

int a = 0;
a = "hello"; // not allowed

在动态类型,绑定到类型的值,而不是变量。 所以,一个变量可能引用 值的类型,然后重新分配后的值类型无关。 Javascript / PHP的例子 动态类型语言:

var a = 0;
a = "hello"; // allowed

尽管动态类型有着生产力的优势,但是动态语言并不能成为所有应用的选择,特别是对于非常大型代码库和高性能的应用程序

优化性能的动态语言像PHP是更具挑战性的比静态语言(如C)。 在静态语言中,优化器可以利用类型信息做出决策。 在动态语言中, 只有很有限的信息是可用的,这使得优化器的选择更加困难。

如果你需要非常高的性能, 静态语言可能是一个更安全的选择。

静态语言的另一个好处是编译器执行额外的检查。 编译器无法发现逻辑错误,这更重要, 但是编译器可以提前发现错误,动态语言只能在运行提示报错信息。

Zephir是静态和动态类型都允许使用的。

###2.5 代码保护###

在某些情况下,编译不显著提高性能,这可能是因为瓶颈所在 在应用程序的I / O(很有可能),而不是计算/内存限制。 然而,编译代码也可能带来某种程度的intelectual保护您的应用程序。 Zephir,产生本地二进制文件,你也有能力“隐藏”用户或客户的原始代码。

##3. 总结##

Zephir不是用来取代PHP或C,相反,我们认为这是一个补充,允许开发者进入代码编译和静态类型.Zephir正是试图加入从C和PHP的世界,美好的事物 寻找机会使他们的应用程序更快!,如果你喜欢PHP,如果你渴望执行效率,那就别犹豫赶快尝试一下zephir吧!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

zephir技术交流:246348908 欢迎大家的加入!

感谢zephir开发人员: