zephir-(5)类型

#zephir-类型#

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

Zephir既可以使用动态类型也可以使用静态类型,这是zephir独特的一点,今天笔者就来和大家一同了解zephir中的基本的类型使用.

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

附上:

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

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

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

##1. 动态类型##

zephir的动态类型和PHP完全一样,他们可以分配和重新分配 不同类型没有限制。

一个动态变量必须用的var关键字来声明:

var a, b, c;

// 初始化变量
let a = "hello", b = false;

// 改变他们的值
let a = 10, b = "140";

// 进行运算操作
let c = a + b;

他们一共有八个类型:

类型	            描述

boolean	        一个boolean值表示一个值 它可以是“true”或“false”。

integer	        integer是数字。 一个integer的大小是与平台相关的。

float/double	一个float/double的大小是与平台相关的。

string	        string是一系列字符,每个字符是一个字节。

array	        array是有序映射

object	        类似PHP的object

resource	    引用的外部resource

null	        特殊的null值表示一个变量没有价值

查看更多关于这些类型的信息PHP手册

###boolean###

一个布尔值表示一个真值。 它可以是“真”或“假”:

var a = false, b = true;

###integer###

一个integer的大小是与平台相关的,(32位)最大值是两个十亿。64位平台最大值约为9e18。PHP不支持无符号整数所以Zephir有这个限制:

var a = 5, b = 10050;

整数溢出

与PHP一样Zephir自动检查整数溢出,不像在C如果你 做操作,可能返回一个很大的可以使用类型,如“unsigned long”或“float” 存储:

unsigned long my_number = 2147483648;

###float/double###

浮点数(也称为“floats”,“doubles”,或“real numbers”)。 浮点常量表达式0个或多个数字,接着一个(.) 其次是0个或多个数字。浮动的大小 和平台相关,尽管最大的~ 1.8e308 精度大约14个小数位数是一种常见的值(64位IEEE格式)。

var number = 5.0, b = 0.014;

###string###

在Zephir,指定字符串只能使用双引号(比如在C),单引号将予以保留。

var today = "friday";

转义序列字符串:

序列	    描述
\ t	    空格
\ n	    换行
r \  	回车
\ \	    反斜杠
\”	    双引号

var today = "\tfriday\n\r",
tomorrow = "\tsaturday";

Zephir可以和PHP一样通过.连接字符串

var name = "peter";

echo "hello: " . name;

###array###

在Zephir中的数组基本上和PHP中是一样的,定义数组的语法比在PHP中略有不同:

//方括号内必须用于定义数组
let myArray = [1, 2, 3];

//双冒号必须用于定义哈希表的键
let myHash = ["first": 1, "second": 2, "third": 3];

###Objects###

Zephir允许实例化操作,调用方法,获取类的常量:

let myObject = new stdClass(),
    myObject->someProperty = "my value";

##2 静态类型##

静态类型允许开发者声明和使用某些类型的C变量.变量一旦声明为动态类型不能改变它们的类型。然而,静态类型会让编译器做一个更好的优化工作。将支持以下类型:

类型	            描述

boolean	            一个boolean值表示一个值 它可以是“true”或“false”。

integer	            符号整数。大小至少为16位。

unsigned integer    无符号整数。大小至少为16位。

char	            同样大小为char,但保证是无符号的。

unsigned char	    一个float/double的大小是与平台相关的。

long	            长带符号整数类型。大小至少为32位。

unsigned long	    同长,但无符号。

float/double	    双精度浮点类型。大小取决于平台

string	            string是一系列字符,其中一个角色是一个字节。

array	            这可被用作散列,地图,字典,收集,堆等的结构

###boolean###

一个布尔值表示一个真值。 它可以是“true”或“false”。

boolean a;

let a = true,
    a = 100, // 自动转化为真
    a = null, // 自动转化为假
    a = "hello"; // 抛出一个编译器异常

###Integer/Unsigned Integer###

整数类型

int a;

let a = 50,
    a = -70,
    a = 100.25, // 自动转化到100
    a = null, // 自动转化为0
    a = false, // 自动转化为0
    a = "hello"; // 抛出一个编译器异常

无符号整数就像整数但是他们没有标志,这意味着你不能存储 负数在这些类型的变量:

let a = 50,
    a = -70, // 自动转化到70

无符号整数大于两倍标准的整数,分配无符号整数到整数 可能代表数据丢失:

uint a, int b;

let a = 2147483648,
	b = a, // 可能的数据丢失

###Long/Unsigned Long###

长变量是整数变量的三倍大,因此他们可以存储更大的数字,除了长度使用和Integer/Unsigned Integer并无太多区别

###Char/Unsigned Char###

字符变量的最小的机器的可寻址单元可以包含基本的字符集。 每一个字符的变量代表每一个字符在字符串:

char ch, string name = "peter";

let ch = name[2]; // 获得 't'
let ch = 'Z'; // 字符文本必须包含在简单的赋值

###String###

字符串是一系列的字符。在PHP中它只支持一组256个的字符, 因此不提供本地Unicode支持。

当一个变量声明字符串它不会改变它的类型:

string a;

let a = "",
    a = "hello", //必须包含在双引号字符串
    a = 'A', // 转换为字符串“A”
    a = null; // 自动变成”“

##3. 总结##

动态类型开发更方便,静态类型效率更高,当然zephir多种都支持,所以无论你是熟悉PHP多一些还是C多一些,变量类型的时候都不会成为你的痛点,下节将介绍zephir中的运算符,多谢大家的支持!

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

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

感谢zephir开发人员:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发指南

Effecvtive Java Note

31750
来自专栏猿人谷

浅谈C/C++中的指针和数组(一)

                                                       浅谈C/C++中的指针和数组(一)       指...

22450
来自专栏Java Web

Java 面试知识点解析(一)——基础知识篇

在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

49450
来自专栏张善友的专栏

检查Python对象

编程环境中的对象很象现实世界中的对象。实际的对象有一定的形状、大小、重量和其它特征。实际的对象还能够对其环境进行响应、与其它对象交互或执行任务。计算机中的对象试...

206100
来自专栏Phoenix的Android之旅

Java的克隆

说到克隆,本质都是使用一个已经实例化完成的对象的副本。 对于基本类型比较简单。比方说我们想复制一个变量,

10320
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列6

清明即事 帝里重清明, 人心自愁思。 车声上路合, 柳色东城翠。 花落草齐生, 莺飞蝶双戏。 空堂坐相忆, 酌茗聊代醉。 1.String是最基本的数据类型吗...

27750
来自专栏GreenLeaves

Javascript深拷贝

var oOriginal = { memNum: 1, // number ...

21860
来自专栏玄魂工作室

如何学Python 第七课 列表型变量 列表方法 列表索引

在上一篇文章里,我们介绍了if语句、elif语句和else语句以及条件判断语句。我们今天来说点流程控制之外的东西:列表。列表型变量可以在变量下存储多个值,并以索...

34570
来自专栏阿凯的Excel

Python读书笔记25(类的继承)

谈类的使用,怎能缺失类的继承!类的继承可以大大简化代码编辑工作。 为啥这么说呢! 因为一个类继承另外一个类的时候,可以自动获得另一个类的所有属性和方法! 原有的...

35360
来自专栏菜鸟计划

angularjs filter详解

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。 主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的...

38280

扫码关注云+社区

领取腾讯云代金券