在计算机科学中,语法糖(syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯。
类型boolean空对象在4.0以后都视为true
stringstring的内部结构类似 array, 可以像python一下使用下标访问字符串
$str = '012345'; echo $str[1]; //1
echo $str{2}; //2
array5.4 以后可以像js一样定义数组
$arr = ['one', 'two', 'three']; //感觉方便了很多
全局变量时间长不用总会忘记重新整理一下加深下印象
$_serverserver_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来定义常量
const debug = true;
运算符<=> 比较运算符,7.0 之后支持
echo $a <=> $b;/*
当 $a < $b 时, 表达式返回 -1
当 $a = $b 时, 表达是返回 0
当 $a > $b 时, 表达式返回 1
*/
空合并运算符 php7特性。
$name = $_post['name'] ''; //如果前面的值不为null,则返回本身,否则返回后面的值
三元运算符 ?: 5.3以后可以使用
$name = $_post['name'] ?: ''; ////如果前面的值不为null,则返回本身,否则返回后面的值
流程控制goto 5.3以上有效
操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。php 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
goto a;echo 'foo';
a:echo 'bar';//输出 bar
函数变长参数 ..., 5.6以后可用
function dosum(...$arr){
$sum = 0; foreach($arr as $v){ $sum += $v;
} return $sum;
}$arr = [1, 2, 3, 4, 5];echo dosum(...$arr); // 输出15echo dosum(1,2,3,4,5,6); //输出21//todo/**
这个语法,我最近总在用。感觉还比较简单。不过要注意服务器版本。。最近入了一个坑。
*/
匿名函数(anonymous functions)5.3
也叫闭包函数,在js中很常见。为了防止污染全局作用域。5.3 以后php也支持了这种写法
$test = function($name='li'){
echo 'my name is '.$name;
};$test();
如果想要从父作用域中继承变量怎么办
//这里定义一个默认的输出名字的方式$tpl = 'my name is ';//使用 use() 来引用父级的变量,最后输出结果与上边一致 $test = function($name='li') use($tpl) {
echo $tpl.$name;
};$test();
需要注意的是,闭包函数的父作用域,是定义它的作用域,不是调用的作用域
类和对象::class 类的静态方法,用于获取类的完全限定名称,(包含命名空间)
namespace foo{ class test{
} echo test::class; // 输出 foo\test, 在使用命名空间的情况非常有用}
5.4 新增加的一个多继承实现方式trait。下面总结了一下基本概念
1.trait 和 class 是相似的概念,但不能被实例化
2.一个类可以使用多个trait,优先级是 class > trait > 父类继承的方法
3.使用insteadof 来解决 tarit 冲突
4.使用as,来修改方法的访问控制
5.在trait中也可以使用tarit。和在class中用法一致
trait a { public function say(){
echo 'trait a';
}
}trait b { public function say(){
echo 'trait b';
} public function walk(){
echo 'walk b';
}
}class person {
use a, b{ b :: say insteadof a; // 使用b的say方法代替了a的say方法
walk as protected; // 将walk 设置为受保护的
}
}$obj = new person;$obj->say(); // echo trait a;$obj->walk(); // 提示不能访问一个受保护的方法
6.在trait中使用, 属性、静态属性、静态方法、抽象类都是被允许的。
trait test { public static $obj; public $name = 1; static function createobj(){
return empty(self::$obj) ? new self : self::$obj;
}
}class son {
use test;
}$obj = son::createobj();echo $obj->name; // echo 1echo $obj === $obj1 ? 0 : 1; // echo 1
5.3 类的后期静态绑定
官方的解释是:
该功能从语言内部角度考虑被命名为”后期静态绑定”。”后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定”,因为它可以用于(但不限于)静态方法的调用
乍一看,好像什么也没看懂。看看具体的代码吧。class a {
public static function who() {
echo __class__;
} public static function test() {
self::who();
}
}class b extends a {
public static function who() {
echo __class__;
}
}
b::test(); // echo a;// 上面是一个正常的调用, 输出了 a// 当我们把 class a 的 test 方法修改一下。 将 self 改成 static 后class a {
public static function who() {
echo __class__;
} public static function test() {
static::who();
}
}class b extends a {
public static function who() {
echo __class__;
}
}
b::test(); // echo b;
总结:php5.3新增加了一类关键字,static 可以在调用函数的方法。用这个关键字,来实现了后期静态绑定。
异常处理比较简单记录一下
try{ throw new execption('抛出异常');
} catch (execption $e){ //获取异常
$error = $e->getmessage();
}echo $error; //抛出异常
相关推荐:
从php语法糖剖析zend vm引擎
两行代码给 php7 添加一个“非空合并”语法糖
以上就是php 5.0 到 7.1 常用语法糖 的详细内容。