- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php7 新增功能实例总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例总结了php7 新增功能。分享给大家供大家参考,具体如下:
1、核心 。
增加接口为用户层提供安全方便的随机数生成器。RFC: https://wiki.php.net/rfc/easy_userland_csprng 。
标量类型声明 。
默认情况下,所有的PHP文件都处于弱类型校验模式.
PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式
强制模式 (默认)严格模式 。
严格模式 。
标量类型声明语法格式:
1
|
declare
(strict_types=1);
|
代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式.
可以使用的类型参数有:
int 。
float 。
bool 。
string 。
interfaces 。
array 。
callable 。
强制模式实例:
1
2
3
4
5
6
7
8
|
<?php
// 强制模式
function
sum(int ...
$ints
) {
return
array_sum
(
$ints
);
}
print
(sum(2,
'3'
, 4.1));
?>
|
以上程序执行输出结果为:
1
|
9
|
实例汇总将参数 4.1 转换为整数 4 后再相加.
严格模式实例:
1
2
3
4
5
6
7
8
9
|
<?php
// 严格模式
declare
(strict_types=1);
function
sum(int ...
$ints
) {
return
array_sum
(
$ints
);
}
print
(sum(2,
'3'
, 4.1));
?>
|
以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:
PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in…… 。
返回类型声明 。
PHP 7 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型.
可以声明的返回类型有:
int 。
float 。
bool 。
string 。
interfaces 。
array 。
callable 。
返回类型声明实例:
实例中,要求返回结果为整数:
1
2
3
4
5
6
7
8
|
<?php
declare
(strict_types=1);
function
returnIntValue(int
$value
): int {
return
$value
;
}
print
(returnIntValue(5));
?>
|
以上程序执行输出结果为:
1
|
5
|
返回类型声明错误实例:
1
2
3
4
5
6
7
8
|
<?php
declare
(strict_types=1);
function
returnIntValue(int
$value
): int {
return
$value
+ 1.0;
}
print
(returnIntValue(5));
?>
|
以上程序由于采用了严格模式,返回值必须是 int,但是计算结果是float,所以会报错,执行输出结果为:
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned... 。
PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式.
NULL 合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数.
以前我们这样写三元运算符:
1
|
$site
= isset(
$_GET
[
'site'
]) ?
$_GET
[
'site'
] :
'PHP中文网'
;
|
现在我们可以直接这样写:
1
|
$site
=
$_GET
[
'site'
] ??
'PHP中文网'
;
|
实例 。
1
2
3
4
5
6
7
8
9
10
11
|
<?php
// 获取 $_GET['site'] 的值,如果不存在返回 'PHP中文网'
$site
=
$_GET
[
'site'
] ??
'PHP中文网'
;
print
(
$site
);
print
(PHP_EOL);
// PHP_EOL 为换行符
// 以上代码等价于 $site = isset($_GET['site']) ? $_GET['site'] : 'PHP中文网';
print
(
$site
);
print
(PHP_EOL);
// ?? 链 $site = $_GET['site'] ?? $_POST['site'] ?? 'PHP中文网'; print($site);
?>
|
以上程序执行输出结果为:
1
2
3
|
PHP中文网
PHP中文网
PHP中文网
|
PHP 7 新增加的太空船运算符(组合比较符)用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1.
实例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php
// 整型比较
print
( 1 <=> 1);
print
(PHP_EOL);
print
( 1 <=> 2);
print
(PHP_EOL);
print
( 2 <=> 1);
print
(PHP_EOL);
print
(PHP_EOL);
// PHP_EOL 为换行符
// 浮点型比较
print
( 1.5 <=> 1.5);
print
(PHP_EOL);
print
( 1.5 <=> 2.5);
print
(PHP_EOL);
print
( 2.5 <=> 1.5);
print
(PHP_EOL);
print
(PHP_EOL);
// 字符串比较
print
(
"a"
<=>
"a"
);
print
(PHP_EOL);
print
(
"a"
<=>
"b"
);
print
(PHP_EOL);
print
(
"b"
<=>
"a"
);
print
(PHP_EOL);
?>
|
以上程序执行输出结果为:
1
2
3
4
5
6
7
8
9
10
11
|
0
-1
1
0
-1
1
0
-1
1
|
在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义.
实例 。
1
2
3
4
5
|
<?php
// 使用 define 函数来定义数组
define(
'sites'
, [
'Google'
,
'PHP'
,
'Taobao'
]);
print
(sites[1]);
?>
|
以上程序执行输出结果为:
1
|
PHP
|
PHP 7 的 Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数.
实例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
class
A {
private
$x
= 1;
}
// PHP 7 之前版本定义闭包函数代码
$getXCB
=
function
() {
return
$this
->x;
};
// 闭包函数绑定到类 A 上
$getX
=
$getXCB
->bindTo(
new
A,
'A'
);
echo
$getX
();
print
(PHP_EOL);
// PHP 7+ 代码
$getX
=
function
() {
return
$this
->x; };
echo
$getX
->call(
new
A);
?>
|
以上程序执行输出结果为:
1
2
|
1
1
|
CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,伪随机数产生器).
PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数.
random_bytes() - 加密生存被保护的伪随机字符串.
random_int() - 加密生存被保护的伪随机整数 。
random_bytes() 。
语法格式 。
1
|
string random_bytes ( int
$length
)
|
参数 。
length - 随机字符串返回的字节数.
返回值 。
返回一个字符串,接受一个int型入参代表返回结果的字节数.
实例 。
1
2
3
4
|
<?php
$bytes
= random_bytes(5);
print
(bin2hex(
$bytes
));
?>
|
以上程序执行输出结果为:
1
|
6f36d48a29
|
random_int() 。
语法格式 。
1
|
int random_int ( int
$min
, int
$max
)
|
参数 。
min - 返回的最小值,必须是大于或等于 PHP_INT_MIN .
max - 返回的最大值,必须是小于或等于 PHP_INT_MAX .
返回值 。
返回一个指定范围内的int型数字.
实例 。
1
2
3
4
5
|
<?php
print
(random_int(100, 999));
print
(PHP_EOL);
print
(random_int(-1000, 0));
?>
|
以上程序执行输出结果为:
1
2
|
723
-64
|
PHP 7 支持通过 new class 来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义.
实例 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?php
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;
// 使用 new class 创建匿名类
$app
->setLogger(
new
class
implements
Logger {
public
function
log(string
$msg
) {
print
(
$msg
);
} });
$app
->getLogger()->log(
"我的第一条日志"
);
?>
|
以上程序执行输出结果为:
1
|
我的第一条日志
|
PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// PHP 7 之前版本需要使用多次
use
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 导入同一个 namespace 的类
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};
?>
|
2、Opcache模块 。
3、OpenSSL模块 。
增加了"alpn_protocols”选项.
4、反射 。
5、流 。
windows版本增加了块读取的选项。可以通过传递array("pipe" => array("blocking" => true))参数来激活.
希望本文所述对大家PHP程序设计有所帮助.
原文链接:https://blog.csdn.net/qq_42176520/article/details/87174274 。
最后此篇关于php7 新增功能实例总结的文章就讲到这里了,如果你想了解更多关于php7 新增功能实例总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!