1. PHP 스칼라 유형 및 반환 값 유형 선언
2. PHP NULL 조합 연산자
3. PHP 우주선 연산자(조합 비교 연산자)
4. PHP 익명 클래스
6, PHP 클로저::call()
7, PHP 필터 unserialize()
8, PHP IntlChar()
9, PHP CSPRNG
10, PHP 7 예외
11, PHP 7 사용 문
12, PHP 7 오류 처리
13, PHP intp() 함수
14, PHP 7 세션 옵션
15, PHP 7 더 이상 사용되지 않는 기능
16, PHP 7 제거된 확장
17, PHP 7 제거된 SAPI
PHP 스칼라 유형 및 반환 값 유형 선언
declare(strict_types=1) ecb704628f0d1ba7498867870ef3bec0 以上程序执行输出结果为: 9复制代码
43ec82d44a534e8fd5e8416c4719c4dd 以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为: PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
$site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
$site = $_GET['site'] ?? '菜鸟教程';复制代码
937b551757918eaa8d4bc2575cf4f5cc复制代码
다음은 예시입니다
838d2955445a31c5bbdfb717d04cb05d 1);print(PHP_EOL);print( 1 96b4fef55684b9312718d5de63fb7121 2);print(PHP_EOL);print( 2 96b4fef55684b9312718d5de63fb7121 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符 // 浮点型比较print( 1.5 96b4fef55684b9312718d5de63fb7121 1.5);print(PHP_EOL);print( 1.5 96b4fef55684b9312718d5de63fb7121 2.5);print(PHP_EOL);print( 2.5 96b4fef55684b9312718d5de63fb7121 1.5);print(PHP_EOL);print(PHP_EOL); // 字符串比较print( "a" 96b4fef55684b9312718d5de63fb7121 "a");print(PHP_EOL);print( "a" 96b4fef55684b9312718d5de63fb7121 "b");print(PHP_EOL);print( "b" 96b4fef55684b9312718d5de63fb7121 "a");print(PHP_EOL); ?>复制代码以上结果分别为复制代码0 -1 1 0 -1 1 0 -1 1复制代码PHP 상수 배열
;
// 使用 define 函数来定义数组 define('sites', [ 'Google', 'Runoob', 'Taobao']);print(sites[1]); ?> 以上程序执行输出结果为: Runoob复制代码PHP 익명 클래스
f59462b884d1e29413c7c5dcd5e665d5logger; } 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("我的第一条日志"); ?> 以上程序执行输出结果为: 我的第一条日志复制代码
Closure::call()
은 더 나은 성능을 가지며 클로저를 변환합니다. 새 객체 인스턴스에 동적으로 바인딩되고 함수를 실행하기 위해 호출됩니다. Closure::call()
有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
实例 c887e2e2c47091b63aac6293b2ac837dx; }; // 闭包函数绑定到类 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 1复制代码
PHP 7 增加了可以为 unserialize()
提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。
实例 <?php class MyClass1 { public $obj1prop; } class MyClass2 { public $obj2prop; } $obj1 = new MyClass1(); $obj1->obj1prop = 1; $obj2 = new MyClass2(); $obj2->obj2prop = 2; $serializedObj1 = serialize($obj1); $serializedObj2 = serialize($obj2); // 默认行为是接收所有类 // 第二个参数可以忽略 // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象 $data = unserialize($serializedObj1 , ["allowed_classes" => true]); // 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2 $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); print($data->obj1prop); print(PHP_EOL); print($data2->obj2prop); ?> 以上程序执行输出结果为: 1 2复制代码
注意 以上特性是
unserialize()
里面多了一个参数选择 allowed_classes
CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,伪随机数产生器)。
PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数。
random_bytes() - 加密生存被保护的伪随机字符串。
random_int() - 加密生存被保护的伪随机整数。
综上 类似于原先的 rand()
和 'mt_rand()'; 只不过 现在random_bytes()生成的是随机字符串
PHP 7 异常用于向下兼容及增强旧的assert()
assert()的应用 跟assert_option() 配合复制代码
PHP 7에는 unserialize()
에 대한 필터링을 제공할 수 있는 기능이 추가되었습니다. 이는 불법 데이터의 코드 삽입을 방지하고 보다 안전한 역직렬화된 데이터를 제공할 수 있습니다.
**参数** assertion 断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。 description 如果 assertion 失败了,选项 description 将会包括在失败信息里。 exception 在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出 实例 将 zend.assertions 设置为 0: 实例 <?php ini_set('zend.assertions', 0); assert(true == false); echo 'Hi!'; ?> 以上程序执行输出结果为: Hi! 将 zend.assertions 设置为 1,assert.exception 设置为 1: 实例 <?php ini_set('zend.assertions', 1); ini_set('assert.exception', 1); assert(true == false); echo 'Hi!'; ?> 以上程序执行输出结果为: Fatal error: Uncaught AssertionError: assert(true == false) in -:2 Stack trace:#0 -(2): assert(false, 'assert(true == ...')#1 {main} thrown in - on line 2复制代码
unserialize()
CSPRNG(암호적으로 안전한 의사 난수 생성기, 의사 난수 생성기). | ||
---|---|---|
random_bytes() - 암호화로 보호된 의사 난수 문자열입니다. |
random_int() - 암호화로 보호된 의사 난수 정수입니다. |
|
요약하자면, 이제 Random_bytes()가 임의의 문자열을 생성한다는 점을 제외하면 원본 rand() 및 'mt_rand()'와 유사합니다. |
// 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}; ?>🎜매개변수 유형도 있습니다🎜🎜🎜🎜🎜구성 항목🎜🎜기본값🎜🎜선택값🎜🎜🎜🎜🎜🎜zend.assertions🎜🎜1🎜🎜1. 코드 생성 및 실행(개발 모드) 🎜 0. 코드를 생성하지만 실행 시 건너뜁니다. 🎜-1. 코드를 생성하지 마세요(프로덕션 환경) 🎜🎜🎜🎜assert.Exception🎜🎜0🎜🎜1. 어설션이 실패하면 예외 개체가 발생합니다. 예외가 제공되면 AssertionError 객체 인스턴스가 발생합니다. 🎜0 Throwable을 사용하거나 생성합니다. 객체를 던지는 대신 객체를 기반으로 경고를 생성합니다(PHP 5와 호환 가능)🎜🎜🎜🎜
**参数** assertion 断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。 description 如果 assertion 失败了,选项 description 将会包括在失败信息里。 exception 在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出 实例 将 zend.assertions 设置为 0: 实例 <?php ini_set('zend.assertions', 0); assert(true == false); echo 'Hi!'; ?> 以上程序执行输出结果为: Hi! 将 zend.assertions 设置为 1,assert.exception 设置为 1: 实例 <?php ini_set('zend.assertions', 1); ini_set('assert.exception', 1); assert(true == false); echo 'Hi!'; ?> 以上程序执行输出结果为: Fatal error: Uncaught AssertionError: assert(true == false) in -:2 Stack trace:#0 -(2): assert(false, 'assert(true == ...')#1 {main} thrown in - on line 2复制代码
PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:
// 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}; ?>
推荐教程:《php教程》
위 내용은 php7의 새로운 기능을 살펴 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!