PHP7新特性之类型声明
今天我在这里总结下PHP7主要的新特性。
1.类型声明
做过php开发的小伙伴们都知道,php7以前的版本变量是不需要声明类型的,函数返回值也是不需要声明类型的,总之,在我们的脑海中就没有这么回事。可能有小伙伴好奇如果声明了类型会不会报错呢?那我们先来一睹为快(下面的代码运行环境linux+php5.4+nginx)
1
2
3
|
int $a = 0; string $b = 'abc' ; echo $a ; |
输出结果:
从输出结果看会报语法错误,看样子不能这么写,那我们看下函数的参数能不能声明参数。
1
2
3
4
5
6
7
|
function sumInt(int $a ,int $b ) { return $a + $b } $a = 1; $b = 2; sumInt( $a , $b ); |
输出结果:
发现报错,说明不能这么写,我们再仔细看下报错,意思是参数的类型必须是类的一个对象
再看个例子:
1
2
3
4
5
6
7
8
9
10
|
class Cat{ } function sumInt(Cat $a ) { var_dump( $a ); } $a = new Cat(); sumInt( $a ); |
输出结果如下:
发现可以正常输出,发现变量换成数组也是可以的,这里就不举例说明了。
那接下来我们再看下php7 下同样的代码会怎么样?
1
2
3
|
int $a = 0; string $b = 'abc' ; echo $a ; |
输出结果如下:
发现同样会报错,看来我们的php7对这种变量类型声明还是不支持,那我们再看下函数的参数是否可以设置参数的类型
1
2
3
4
5
6
7
|
function sumInt(int a,int b) { return $a + $b } $a = 1; $b = 2; sumInt( $a , $b ); |
输出结果是3,说明php7支持这种类型声明,经实践变量的类型是类的对象或者数组也是可以的
可能有小伙伴比较好奇为什么php7会加上了类型声明,加上了但又不像强类型语言那样,可以直接给任何变量设置类型,本人的理解是php7之所以加上类型声明是追求更快的速度,为什么这么说呢?我们都知道任何一个变量都需要一定的空间存储,那么就会涉及到变量内存分配的问题,php7之前的版本变量分配的内存是根据变量的值来判断变量的类型然后再分配内存的,如果改成先声明变量的类型就省了一步,速度自然快了不少。说到这里又小伙伴可能就会说为什么有些地方不能使用变量类型声明了,本人的理解是如果改成和强类型语言一样,可能和之前的版本跨度比较大,相信后续的版本会继续完善
PHP7新特性之类型声明的更多相关文章
- 【php】php7新特性及其优化原理
php7.x版本系列相比之前的php的版本提交性能提高了不少,这里面其中的一些主要改变是性能提高的关键,主要有以下内容. 1.zval使用栈内存 在zend引擎和扩展中,经常要创建php变量,其底 ...
- 【ElasticSearch】ES5新特性-keyword-text类型-查询区别
ES5新特性-keyword-text类型-查询区别 elasticsearch-head Elasticsearch-sql client junneyang (JunneYang) es keyw ...
- PHPStorm使用PHP7新特性出现红色波浪错误
今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...
- Python 3 新特性:类型注解——类似注释吧,反正解释器又不做校验
Python 3 新特性:类型注解 Crossin 上海交通大学 计算机应用技术硕士 95 人赞同了该文章 前几天有同学问到,这个写法是什么意思: def add(x:int, y:int) - ...
- PHP7 新特性 简介
整理了一些常用的新特性,欢迎点赞!!! 新增操作符 1.?? $username = $_GET['user'] ?? ''; $username = isset($_GET['user']) ? $ ...
- PHP7新特性 What will be in PHP 7/PHPNG
本文结合php官网和鸟哥相关文章总结: 官网:http://www.php7.ca/ https://wiki.php.net/phpng PHP7将在2015年10月正式发布,PHP7 ,将会是 ...
- PHP7新特性的介绍
关于PHP 20年的发展历史: 迄今为止最流行的WEB开发语言: 超过82%的网站都会使用PHP作为他们的服务端开发语言: 新特性介绍 PHP NG – Zend Engine 3 抽象语法树 64位 ...
- php7 新特性整理
PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来越好. 在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP ...
- php7+新特性
php7已经发布有段时间了,查了下正式版本的发布时间是2015年底,至于具体的新特性,在这里总结一下. 标量类型声明 php7新增了4种类型, 字符串(string), 整数 (int), 浮点数 ( ...
- php7新特性的理解和比较
1. null合并运算符(??) ??语法: 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数. //php7以前 if判断 if(empty($_GET['param']) ...
随机推荐
- centos 7网卡配置文件详解(ifcfg-ens33)
centos 7网卡配置文件详解(ifcfg-ens33) [root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE ...
- 一文教你基于LangChain和ChatGLM3搭建本地知识库问答
本文分享自华为云社区<[云驻共创]LangChain+ChatGLM3实现本地知识库,转华为云ModelArts,实现大模型AI应用开发> ,作者:叶一一. 一.前言 本期华为云的讲师是华 ...
- 这是一个基于threading可停止线程的有限容量有限并行度的python任务管理器
这是一个可停止线程的有限容量有限并行度的任务管理器 基于:GitHub - AlitaIcon/StopableThreadJob: 可停止线程任务管理器 Quick Start 基础调用与效果 im ...
- kubernetes ingress部署
ingress概念 ingress与service,deployment同样都是k8s中的一种资源 ingress用于实现域名方式访问k8s内部应用 安装ingress 1. 安装helm: wget ...
- 为UIView自定义Xib
一.需求 通过Interface Builder的形式创建Xib,并将其和一个UIView的子类绑定,如何实现? 二.解决 这个问题通过搜索,有大量的答案,大概答案的代码如下: 也就是在你的子类中,在 ...
- NOIP模拟63
T1 电压机制 解题思路 先找出这个图的一个生成树,然后没有称为树边的边就都是返祖边了. 对于一个边是合法的当且仅当它属于所有的奇数环并且不属于任何一个偶数环. 可以利用树上差分进行修改,更改一个返祖 ...
- 面试必会->Redis篇
01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 : 使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些 ...
- LeetCode 128. Longest Consecutive Sequence 最长连续序列 (C++/Java)
题目: Given an unsorted array of integers, find the length of the longest consecutive elements sequenc ...
- 剑指Offer-47.求1+2+3+...+n(C++/Java)
题目: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析: 利用短路与来判断n是否大于0,从而实现递 ...
- ClickHouse + ClickVisual 构建日志平台
越来越多的互联网公司开始尝试 ClickHouse 存储日志,比如映客.快手.携程.唯品会.石墨文档,但是 ClickHouse 存储日志缺少对应的可视化方案,石墨文档开源了 ClickVisual ...