整理给大家看的php7语法总结

php5.6~7.0

标量类型声明

类型声明允许函数在调用时要求参数为特定类型。 如果给出的值类型不对,那么将会产生一个错误: 在PHP 5中,这将是一个可恢复的致命错误,而在PHP 7中将会抛出一个TypeError异常。

为了指定一个类型声明,类型应该加到参数名前。这个声明可以通过将参数的默认值设为NULL来实现允许传递NULL

PHP7增加了以下几种类型声明

Type Description Minimum PHP version
bool bool类型 PHP 7.0.0
float float类型 PHP 7.0.0
int int类型 PHP 7.0.0
string string类型 PHP 7.0.0
iterable iterable类型 PHP 7.1.0
object object类型 PHP 7.2.0

返回值类型声明

PHP 7 增加了对返回值类型声明的支持。 就如 [类型声明]一样, 返回值类型声明将指定该函数返回值的类型。同样,返回值类型声明也与 [有效类型] 中可用的参数类型声明一致。
[严格类型] 也会影响返回值类型声明。在默认的弱模式中,如果返回值与返回值的类型不一致,则会被强制转换为返回值声明的类型。在强模式中,返回值的类型必须正确,否则将会抛出一个TypeError异常.
//严格类型声明
declare(strict_types=1);
function sum($a, $b): float {  
    return $a + $b;  
}

null合并运算符

由于日常使用中存在大量同时使用三元表达式和 [isset()]的情况, 我们添加了null合并运算符 (_??_) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。
$username = $_GET['user'] ?? 'nobody';  
// This is equivalent to:  
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

太空船操作符(组合比较符)

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的

// 整数  
echo 1 <=> 1; // 0  
echo 1 <=> 2; // -1  
echo 2 <=> 1; // 1  
  
// 浮点数  
echo 1.5 <=> 1.5; // 0  
echo 1.5 <=> 2.5; // -1  
echo 2.5 <=> 1.5; // 1  
   
// 字符串  
echo "a" <=> "a"; // 0  
echo "a" <=> "b"; // -1  
echo "b" <=> "a"; // 1

通过 define() 定义常量数组

Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。

tips:

和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 语句之内用 const 来定义常量。
define('ANIMALS', [ 'dog', 'cat', 'bird'  
]);  
  
echo ANIMALS[1]; // 输出 "cat"

匿名类

现在支持通过_new class_ 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。
interface Logger {  
    public function log(string $msg);  
}  
  
class Application {  
    private $logger;  
  
    public function getLogger(): Logger {  
         return $this->logger;  
    }  
  
    public function setLogger(Logger $logger) { $this->logger = $logger;  
    }  
}  
  
$app = new Application;  
$app->setLogger(new class implements Logger {  
    public function log(string $msg) {  
        echo $msg;  
    }  
});  
  
var_dump($app->getLogger());
object(class@anonymous)#2 (0) {
}

Closure::call()

Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。
class A {private $x = 1;}  
  
// PHP 7 之前版本的代码  
$getXCB = function() {return $this->x;};  
$getX = $getXCB\->bindTo(new A, 'A'); // 中间层闭包  
echo $getX();  
  
// PHP 7+ 及更高版本的代码  
$getX = function() {return $this->x;};  
echo $getX->call(new A);
1
1

预期

预期是向后兼用并增强之前的 assert() 的方法。 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。

老版本的API出于兼容目的将继续被维护,assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 string或一个待测试的boolean

ini_set('assert.exception', 1);  
  
class CustomError extends AssertionError {}  
  
assert(false, new CustomError('Some error message'));
Fatal error: Uncaught CustomError: Some error message

Group use declarations

从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。
// PHP 7 之前的代码  
use some\\namespace\\ClassA;  
use some\\namespace\\ClassB;  
use some\\namespace\\ClassC as C;  
  
use function some\\namespace\\fn\_a;  
use function some\\namespace\\fn\_b;  
use function some\\namespace\\fn\_c;  
  
use const some\\namespace\\ConstA;  
use const some\\namespace\\ConstB;  
use const some\\namespace\\ConstC;  
  
// PHP 7+ 及更高版本的代码  
use some\\namespace\\{ClassA, ClassB, ClassC as C};  
use function some\\namespace\\{fn\_a, fn\_b, fn\_c};  
use const some\\namespace\\{ConstA, ConstB, ConstC};

会话选项

session_start() 可以接受一个 array 作为参数, 用来覆盖 php.ini 文件中设置的 会话配置选项

在调用 session_start() 的时候, 传入的选项参数中也支持 session.lazy_write 行为, 默认情况下这个配置项是打开的。它的作用是控制 PHP 只有在会话中的数据发生变化的时候才 写入会话存储文件,如果会话中的数据没有发生改变,那么 PHP 会在读取完会话数据之后, 立即关闭会话存储文件,不做任何修改,可以通过设置 read_and_close 来实现。

例如,下列代码设置 session.cache_limiter 为 _private_,并且在读取完毕会话数据之后马上关闭会话存储文件。

session_start([ 'cache_limiter'=> 'private', 'read_and_close' => true,  
]);

preg_replace_callback_array()

在 PHP 7 之前,当使用 preg_replace_callback() 函数的时候, 由于针对每个正则表达式都要执行回调函数,可能导致过多的分支代码。 而使用新加的 preg_replace_callback_array() 函数, 可以使得代码更加简洁。

现在,可以使用一个关联数组来对每个正则表达式注册回调函数, 正则表达式本身作为关联数组的键, 而对应的回调函数就是关联数组的值。

新加入两个跨平台的函数: random_bytes()random_int() 用来产生高安全级别的随机字符串和随机整数。

可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象

允许在克隆表达式上访问对象成员,例如: _(clone $foo)->bar()_。


持续更新。。。。

阅读 147

推荐阅读
php7X语法总结
用户专栏

那个喜欢看夕阳的男孩。偏执、有梦想、童心不改。

0 人关注
1 篇文章
专栏主页