php语法糖

2020年11月18日 作者 张舫

PHP更新了这久了,一只也没有来巩固一下基本语法。最近抽了点时间梳理了一下php版本的差异。自己记录一下,同时也分享出来 大家一起学习探讨一下

类型

Boolean
  • 空对象在4.0以后都视为true
String
  • string的内部结构类似 array, 可以像python一下使用下标访问字符串
Array
  • 5.4 以后可以像JS一样定义数组

全局变量

$_SERVER
  • SERVER_ADDR IP地址 127.0.0.1
  • SERVER_NAME 主机名 localhost
  • SERVER_SOFTWARE 服务器类型 nginx
  • REMOTE_ADDR 客户端IP. 127.0.0.1
    s
$_FILES
  • $_FILES['file']['name'] 图片原名称
  • $_FILES['file']['type'] 图片MIME类型
  • $_FILES['file']['size'] 图片大小
  • $_FILES['file']['tmp_name'] 服务器端临时名称
常量
  • 5.3之后可以使用const来定义常量

运算符
  • <=> 比较运算符,7.0 之后支持

  • ?? 空合并运算符 PHP7特性。

  • 三元运算符 ?: 5.3以后可以使用

流程控制
  • goto 5.3以上有效

操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。

函数
  • 变长参数 ..., 5.6以后可用

  • 匿名函数(Anonymous functions)5.3

也叫闭包函数,在JS中很常见。为了防止污染全局作用域。5.3 以后PHP也支持了这种写法

如果想要从父作用域中继承变量怎么办

需要注意的是,闭包函数的父作用域,是定义它的作用域,不是调用的作用域

类和对象

  • ::class 类的静态方法,用于获取类的完全限定名称,(包含命名空间)

  • 5.4 新增加的一个多继承实现方式trait。下面总结了一下基本概念

1.trait 和 class 是相似的概念,但不能被实例化
2.一个类可以使用多个trait,优先级是 class > trait > 父类继承的方法
3.使用insteadof 来解决 tarit 冲突
4.使用as,来修改方法的访问控制
5.在trait中也可以使用tarit。和在class中用法一致

6.在trait中使用, 属性、静态属性、静态方法、抽象类都是被允许的。

  • 5.3 类的后期静态绑定
    官方的解释是:

该功能从语言内部角度考虑被命名为”后期静态绑定”。”后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定”,因为它可以用于(但不限于)静态方法的调用
乍一看,好像什么也没看懂。看看具体的代码吧。

总结:PHP5.3新增加了一类关键字,static 可以在调用函数的方法。用这个关键字,来实现了后期静态绑定

异常处理