PHP 5.0 到 7.1 常用语法糖(个人整理)
2017-07-17 15:21
501 查看
类型
Boolean
String
Array
全局变量
_SERVER
_FILES
常量
运算符
流程控制
函数
类和对象
异常处理
PHP更新了这久了,一只也没有来巩固一下基本语法。最近抽了点时间梳理了一下php版本的差异。自己记录一下,同时也分享出来 大家一起学习探讨一下
空对象在
String
Array
$_SERVER
s
$_FILES
常量
运算符
三元运算符
流程控制
操作符可以用来跳转到程序中的另一位置。该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break。
函数
变长参数
匿名函数(Anonymous functions)
也叫闭包函数,在JS中很常见。为了防止污染全局作用域。5.3 以后PHP也支持了这种写法
如果想要从父作用域中继承变量怎么办
需要注意的是,闭包函数的父作用域,是定义它的作用域,不是调用的作用域
1.trait 和 class 是相似的概念,但不能被实例化
2.一个类可以使用多个trait,优先级是
3.使用
4.使用
5.在
6.在
官方的解释是:
该功能从语言内部角度考虑被命名为”后期静态绑定”。”后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为”静态绑定”,因为它可以用于(但不限于)静态方法的调用
乍一看,好像什么也没看懂。看看具体的代码吧。
总结:PHP
Boolean
String
Array
全局变量
_SERVER
_FILES
常量
运算符
流程控制
函数
类和对象
异常处理
PHP更新了这久了,一只也没有来巩固一下基本语法。最近抽了点时间梳理了一下php版本的差异。自己记录一下,同时也分享出来 大家一起学习探讨一下
类型
Boolean空对象在
4.0以后都视为
true
String
string的内部结构类似
array, 可以像python一下使用下标访问字符串
$str = '012345'; echo $str[1]; //1 echo $str{2}; //2
Array
5.4以后可以像JS一样定义数组
$arr = ['one', 'two', 'three']; //感觉方便了很多
全局变量
时间长不用总会忘记重新整理一下加深下印象
$_SERVER
SERVER_ADDRIP地址 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); // 输出15 echo 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 1 echo $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;
总结:PHP
5.3新增加了一类关键字,
static可以在调用函数的方法。用这个关键字,来实现了
后期静态绑定。
异常处理
比较简单记录一下
try{ throw new Execption('抛出异常'); } catch (Execption $e){ //获取异常 $error = $e->getMessage(); } echo $error; //抛出异常
相关文章推荐
- PHP 5.0 到 7.1 常用语法糖(个人整理)
- PHP常用文件函数和目录函数整理
- 个人整理的Linux Shell语法速查表(用C语言语法来作对比)
- 十个常用PHP类库整理
- 个人常用软件收集整理
- PHP/Javascript/CSS/jQuery常用知识大全详细整理第1/2页
- Php常用文件操作函数,正则表达式,个人学习总结
- Markdown的常用语法(个人总结)
- jQuery插件之【jqGrid】常用语法整理
- EXTJS 2.0 常用的语法整理(增加中....)
- JS常用算法-个人整理
- php正则表达式入门-常用语法格式
- PHP新特性DateTime常用方法整理
- PHP中$_SERVER常用参数整理
- jsp,.net,php,asp语法不同之处粗略搜集未做整理
- 整理: php常用函数收集并附解释说明
- ubuntu常用脚本命令-个人整理
- SQL常用语法网络整理版本
- PHP 常用正则表达式整理
- PHP常用代码整理(不定期更新)