正文
关于 ??
的使用
在最近的一次Commit中,你可以看到我在代码中修改出大量的??
语法
在其中,我们要了解??
的意义
??
的功能
前端提交form到后端验证,应传入参数 a
通常情况下我们会对$a
的存在进行校验,我们将校验结果存入$b
中
即为:若$a
存在,$b = $a
。若$a
不存在,$b = 0
$a = $_GET["a"];
// 原有写法
$b = isset($a)?$a:0;
// 原有写法的意义
if (isset($a)) {
$b = $a;
} else {
$b = 0;
}
// 更好的写法
$b = $a ?? 0;
将原有写法写成更简洁的??
语法有益于阅读程序,在此处可能体现并不明显,但在如下案例则显然
// 原有写法
$videoId = isset($meta['videoId']) ? $meta['videoId'] : '';
$source = isset($meta['source']) ? $meta['source'] : '';
$oss = isset($meta['oss']) ? $meta['oss'] : false;
$width = isset($meta['width']) ? $meta['width'] : '100%';
$height = isset($meta['height']) ? $meta['height'] : '500px';
$poster = isset($meta['thumbnail']) ? $meta['thumbnail']: '';
$endpoint = isset($meta['endpoint']) ? $meta['endpoint'] : MINECLOUDVOD_SETTINGS['alivod']['endpoint'];
$markers = isset($meta['markers']) ? $meta['markers'] : false;
$captions = isset($meta['captions']) ? $meta['captions'] : false;
$slide = isset($meta['slide']) ? $meta['slide'] : true;
$slidetext = isset($meta['slidetext']) ? $meta['slidetext']: false;
$isLive = isset($meta['live']) ? $meta['live'] : false;
$autoplay = isset($meta['autoplay']) ? $meta['autoplay'] : (MINECLOUDVOD_SETTINGS['aliplayerconfig']['autoplay']? true : false);
$countdown = isset($meta['countdown']) ? $meta['countdown']: false;
// ??写法
$videoId = $meta['videoId'] ?? '';
$source = $meta['source'] ?? '';
$oss = $meta['oss'] ?? false;
$width = $meta['width'] ?? '100%';
$height = $meta['height'] ?? '500px';
$poster = $meta['thumbnail'] ?? '';
$endpoint = $meta['endpoint'] ?? MINECLOUDVOD_SETTINGS['alivod']['endpoint'];
$markers = $meta['markers'] ?? false;
$captions = $meta['captions'] ?? false;
$slide = $meta['slide'] ?? true;
$slidetext = $meta['slidetext'] ?? false;
$isLive = $meta['live'] ?? false;
$autoplay = $meta['autoplay'] ?? (MINECLOUDVOD_SETTINGS['aliplayerconfig']['autoplay'] ? true : false);
$countdown = $meta['countdown'] ?? false;
清晰可见的代码大小缩减和可阅读性增强
扩展
// 同样
$a = $a ? $a : 0;
// 等价于
$a = $a ?: 0;
并且要注意的是,使用empty()
要比isset()
快得多
关于常量定义
常量与变量
- 常量前面没有美元符号($)
- 常量只能通过define()函数定义,而不能通过赋值语句
- 常量可以不用理会变量的作用域在任何地方定义和访问
- 常量一旦定义就不能重新定义或取消定义
- 常量的值只能是标量(boolean、integer、float和string)
关于常量
众所周知,PHP中全局常量定义有两种方法:define()
和const
而常规的常量(constant) 是使用const定义
define
和const
的区别
const
是一个语言结构;const
定义的常量是大小写敏感。而define
是一个函数,可以通过第三个参数来指定是否区分大小写。true
表示大小写不敏感,默认为false
。例如:define('PI', 3.14, true);
const
简单易读,编译时要比define
快很多const
可在类中使用,用于类成员常量定义(在php 5.3.0以后,可以使用const
关键字在类定义的外部定义常量),定义后不可修改,const
在类内定义常量,并且const
必须通过类名::变量名来进行访问;define
不能在类中使用,可用于全局变量。const
是在编译时定义,因此必须处于最顶端的作用区域,不能在函数,循环及if
条件中使用;而define
是函数,也就是能调用函数的地方都可以使用const
只能用普通的常量名,define
常量名中可以有表达式const
定义的常量只能是静态常量,define
可以是任意表达式
也就是说,define
并非真正的“常量”
// 使用const常量定义静态内容的速度较快效果较好
const VERSION = '1.0.0';
// 但不论表达式内容是否为全常量,都必须使用define定义
define('URL', 'https://source.ahdark.com/wordpress/'.VERSION);
// 而且,如果define定义的表达式内容有变量,当变量改变,define的返回内容会随之改变
define('URL', 'https://source.ahdark.com/wordpress/'.$_GET['v']);
以上就是这篇文章的全部内容了,希望本文的内容对大家的PHP学习或者工作具有一定的参考价值
嘿!写得真不错!
草,大佬好,我正在改G主题( 😉
围观围观 😳