- 内容:
· 返回值类型声明
· null合并运算符
· declare
-
在php7中增加了返回值类型声明
示例1:
<?php function helloWorld():string { return("HelloWord"); } function helloWorld1():string { return(1); } var_dump(helloWorld());//string(9) "HelloWord" var_dump(helloWorld1());//string(1) "1" //需要注意的是 如果当前设置为严格模式则会报错
-
null合并运算符
- 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数。
<?php $a = $_GET['a'] ?? 'a'; //等同于 $a = isset($_GET['a']) ? $_GET['a'] :'a'; //简单解释就是: 当$_GET['a'] 不存在时候则将 $a 赋值为 'a'; print_r('$a= '.$a); // 例如: // https://******/index.php?a=test // 输出 $a= test // https://******/index.php // 输出 $a= a
declare命令
例子:
declare 代码段中的 statement 部分将被执行——怎样执行以及执行中有什么副作用出现取决于 directive 中设定的指令。
declare 结构也可用于全局范围,影响到其后的所有代码(但如果有 declare 结构的文件被其它文件包含,则对包含它的父文件不起作用)。
declare 调试内部程序使用.
先简单说明,declare这个函数支持ticks,函数表示记录程序块,需配合register_tick_function 函数使用。ticks参数表示运行多少语句调用一次register_tick_function的函数。并且declare支持两种写法:
declare(ticks = 1); 整个脚本
declare(ticks = 1) { 内部的代码做记录
…
}
上述代码除了 函数体内,外部都会被执行,运行可以看执行次数和时间. 他跟适合做测试代码段中每一步分的执行时间 和执行次数.
declare 必须是全局的,放在程序外部.
不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
tick 代表一个事件,事件的定义是在register_tick_function;事件的执行频率是在(ticks=3)。
表示事件频率是执行3个才记录一次. microtime() 的打印时间.
//需要在文件开头
//strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件
declare(strict_types=1);// 严格模式下
declare(strict_types=0);// 弱校验模式
<?php
declare (ticks = 1); //这句这么写表示全局的脚本都做处理
function foo() { //注册的函数
static $no;
$no++;
echo $no."======";
echo microtime()."\n";
}
register_tick_function("foo"); //注册函数,后面可以跟第2个参数,表示函数的参数
$a = 1;
for($i=0;$i<5;$i++) { //这里的循环也是语句,会做一次判断$i<5的判断执行
$b = 1;
}
?>
- 拓展延伸//设置declare(strict_types=1);
//strict_types.php <?php declare(strict_types=1);//强制模式 function helloWorld():string { return("HelloWord"); } function helloWorld1():string { return(1); } //var_dump(helloWorld());//输出:string(9) "HelloWord" //var_dump(helloWorld1());//当设置非强制模式时候输出: string(1) "1" /* * 当设置成 declare(strict_types=1); 时候如果返回值与返回值类型声明 不一致则会报错如下: * Fatal error: Uncaught TypeError: Return value of helloWorld1() must be of the type string, int returned * 当 declare(strict_types=1); 后设置有error_reporting(0)时候则不会输出return值 */ // 文件包含测试: /* * 经过测试:当include其他文件时候如果被include的文件头部不设置 declare(strict_types=1)时候不会受到本文件的影响 */ include_once "strict_types1.php"; var_dump(helloWorld3());//直接输出:string(1) "3" 不会受到declare(strict_types=1) 的影响 /* 测试说明: * 当作为主文件使用declare函数,被引用的文件中没有declare时候 * 调用被引用的文件中的函数时候 * 无论是在被引用的文件中进行 function 的调用,还是 在本文件中进行调用,都不会受到 declare(strict_types=1); 的影响 * 注明:strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件 */ ?> //strict_types1.php 内容如下 <?php function helloWorld3():string { return(3); } var_dump(helloWorld3());//直接输出:string(1) "3"