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中的运算符,多谢大家的支持!

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

时间: 2024-08-31 16:31:05

zephir-(5)类型的相关文章

php限制上传文件类型并保存上传文件的方法

 这篇文章主要介绍了php限制上传文件类型并保存上传文件的方法,涉及php针对上传文件的常用操作技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php限制上传文件类型并保存上传文件的方法.分享给大家供大家参考.具体如下: 下面的代码演示了php中如何获取用户上传的文件,并限制文件类型的一般图片文件,最后保存到服务器 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3

C语言指针的长度和类型

如果考虑应用程序的兼容性和可移植性,指针的长度就是一个问题,在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,尽管C标准没有规定所有类型指针的长度相同,但是通常实际情况就是这样.但是函数指针长度可能与数据指针的长度不同. 指针的长度取决于使用的机器和编译器,例如:在现代windows上,指针是32位或是64位长 测试代码: #include<stdio.h> #include<math.h> #include<stdlib.h> #include<s

Windows 2008此Bluetooth设备或计算机无法处理该类型文件解决方法

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   尝试了论坛里好几个vista提取的驱动,不是安装不上就是不能配对. 还是回到从xp提取的那个驱动,安装流畅,眨眼间就完成了,没什么开始有感叹号什么的问题,直接就安装上了. 尝试传文件,配对很正常,刚开始无法从计算机向手机(多普达310)传文件,显示"此 Bluetooth 设备或计算机无法处理该类型文件",只要先从手机向计算机传个文件,然后就

java se-使用泛型打印输出任意类型的数组,为什么调用时有错误?

问题描述 使用泛型打印输出任意类型的数组,为什么调用时有错误? import java.util.Arrays; public class FanXing { public static void printMatrix(T[][] matrix){ for(int i=0;i<matrix.length;i++){ System.out.println(Arrays.toString(matrix[i])); } } public static void main(String[] args)

hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据呢

问题描述 请问hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据并且能自动插入和更新呢?就是相当于mysql中timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP;这样的数据列,在hibernate中怎么样用annotation注解来配置呢(不要xml的配置方式).各位大虾帮帮忙啊,跪求中-- 解决方案 解决方案二:没用过注解吖.看下这个资料吧解决方案三:@Column(name="D_UP

scanner-java中Scanner的使用问题,读取float类型输入值

问题描述 java中Scanner的使用问题,读取float类型输入值 最近在学习技术,在使用到java.util.Scanner时遇到了个问题: 问题描述:在使用float fNum = scanner.nextFloat()读取值时,如果输入的值超过8位,读取时会[异常]被截取,导致读取的值和输入的值不符,如果输入时,在值的后面加上"F"或"f",会导致float fNum = scanner.nextFloat()读取报错: 鄙人现在在学java技术,自己也想

oracle 数据库 关于使用类型的问题

问题描述 oracle 数据库 关于使用类型的问题 我定义了 一个类型 和一个嵌套表 如下create or replace type typ_point1 AS OBJECT( 代码1 varchar(3) 代码2 varchar(8) 代码3 Timestamp....ect );create or replace TYPE typ_point1newt as table of typ_point1new; CREATE TABLE ""C##GAOMIAO""

Openstack API 类型 &amp;amp; REST 风格

目录 目录 Openstack 提供了三种操作方式 Web界面 CIL 指令行 RESTful API REST 风格 RESTFul风格的API设计 基于HTTP协议的RESTful API OpenStack中的RESTful API开发框架 Openstack 提供了三种操作方式 Web界面 也就是通过Dashboard(儀表板)来使用Openstack雲計算平台上的功能.通过Web界面使用 OpenStack Services 这种方式是通过 OpenStack Horizon Proj

.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

内容导读 •概述 •当你声明一个变量背后发生了什么? •堆和栈 •值类型和引用类型 •哪些是值类型,哪些是引用类型? •装箱和拆箱 •装箱和拆箱的性能问题一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类型.装箱和拆箱.本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:堆和栈.之后,我们会探讨一下值类型和引用类型,并对有关于这两种类型的重要基础内容做一个讲解. 本文会通过一个简单的代码来展示在装箱和拆箱过程中所带来的性能上的影响,请各位仔细阅读