理解和比较php7新特性

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

理解和比较php7新特性

推荐(免费):PHP7

1、 null合并运算符(??)

??语法: 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数.

 1 //php7以前   if判断  2 if(empty($_GET['param'])) {  3       $param = 1;  4 }else{  5     $param = $_GET['param'];  6 } 7   8 //php7以前  三元运算符  9 $param = empty($_GET['param']) ? 1 : $_GET['param'];10  11 //PHP7  null合并运算符12 $param = $_GET['param'] ?? 1;//1
登录后复制

2. define() 定义常量数组

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World
登录后复制

3. 组合比较符(<=>)

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

 1 //整数  2 echo 1 <=> 1; // 0  3 echo 1 <=> 2; // -1  4 echo 2 <=> 1; // 1 5   6 //浮点数 7 echo 1.5 <=> 1.5; // 0  8 echo 1.5 <=> 2.5; // -1  9 echo 2.5 <=> 1.5; // 1  11 //字符串12 echo "a" <=> "a"; // 0 13 echo "a" <=> "b"; // -1 14 echo "b" <=> "a"; // 1
登录后复制

4. 变量类型声明

两种模式: 强制(默认)和严格模式. 可以使用下列类型参数: string,int,float,bool

 1 //... 操作符: 表示这是一个可变参数. php5.6及以上的版本可使用: 函数定义的时候变量前使用.  2 function intSum(int ...$ints){  3     return array_sum($ints);  4 }  5 var_dump(intSum(2,'3.5'));//5  6   7 //严格模式  8 //模式声明:declare(strict_types=1);  默认情况值为0,值为1代表为严格校验的模式   9 declare(strict_types=1); 10 function add(int $a,int $b){ 11     return $a+$b; 12 } 13 var_dump(add(2,'3.5')); //Fatal error: Uncaught TypeError: Argument 2 passed to add() must be of the type integer
登录后复制

5. 返回值类型声明

增加返回类型声明的支持.类似于参数类型声明.(用法在函数定义的后面加 :类型名)

1 //有效的返回类型2 declare(strict_types = 1);3 function getInt(int $value): int {4   return $value;5 }6 print(getInt(6));//6
登录后复制
1 //无效返回类型2 declare(strict_types = 1);3 function getNoInt(int $value): int {4   return $value+'2.5';5 }6 print(getNoInt(6));//Fatal error: Uncaught TypeError: Return value of getNoInt() must be of the type integer
登录后复制

6. 匿名类

允许new class {} 创建一个匿名的对象.

 1 <?php  2 //php7以前 接口实现  3 interface User{  4     public function getDiscount();  5 }  6 class VipUser implements User{  7     //折扣系数  8     private $discount = 0.6;  9     public function getDiscount() { 10         return $this->discount; 11     } 12 } 13 class Goods{ 14     private $price = 200; 15     private $objectVipUser; 16     //User接口VipUser类实现 17     public function getUserData($User){ 18         $this->objectVipUser = $User; 19         $discount = $this->objectVipUser->getDiscount(); 20         echo "商品价格:".$this->price*$discount; 21     } 22 } 23 $display = new Goods(); 24 //常规实例化接口实现对象 25 $display ->getUserData(new VipUser);//商品价格:120
登录后复制
 1 <?php  2 //php7 创建一个匿名的对象  3 interface User{  4     public function getDiscount();  5 }  6 class Goods{  7     private $price = 200;  8 private $objectVipUser;  9     public function getUserData($User){ 10         $this->objectVipUser = $User; 11         $discount = $this->objectVipUser->getDiscount(); 12         echo "商品价格:".$this->price*$discount; 13     } 14 } 15 $display = new Goods(); 16 //new匿名对象实现user接口 17 $display ->getUserData(new class implements User{ 18     private $discount = 0.6; 19     public function getDiscount() { 20         return $this->discount; 21     } 22 });//商品价格:120
登录后复制

7. Closure::call()

Closure::call() 方法被添加为一个简短的方式来临时绑定一个对象作用域到一个闭包并调用它. 与PHP5的bindTo相比.它的性能要快得多.

 1 <?php  2 //php7以前  3 class A {  4     private  $attribute = 'hello world';  5 }  6   7 $getClosure = function(){  8     return $this->attribute;  9 }; 10  11 $getAttribute = $getClosure->bindTo(new A, 'A');//中间层闭包 12 echo $getAttribute();//hello world
登录后复制
 1 <?php  2 //PHP7  3 class A {  4     private  $attribute = 'hello world';  5 }  6   7 $getClosure = function(){  8     return $this->attribute;  9 }; 10  11 echo $getClosure->call(new A);//hello world
登录后复制

8. unserialize()

unserialize()函数:过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World0
登录后复制

9. IntlChar

IntlChar:提供了一些可用于访问Unicode字符信息的实用方法的访问. 注意:必须安装Intl扩展才能使用!

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World1
登录后复制

10. CSPRNG

CSPRNG 函数提供一种简单的机制来生成密码的随机数.

random_bytes() -加密生存被保护的伪随机字符串.

random_int() -加密生存被保护的伪随机整数.

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World2
登录后复制

11. use 语句

可以使用单个use语句从相同的命名空间导入类,函数和常量,而不是使用多个use语句.

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World3
登录后复制

12. intp

新增加intp()函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整.

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World4
登录后复制

13. PHP7 错误处理

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World5
登录后复制
 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World6
登录后复制
 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World7
登录后复制

 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World8
登录后复制
 1 //php7以前  2 define("CONTENT", "hello world");  3 echo CONTENT;//hello world 4   5 //PHP7 6 define('ANIMALS', [  7     'dog',  8     'cat',  9     'bird' 10 ]); 11 echo ANIMALS[2];//bird12  13 //PHP7 类外也可使用const来定义常量 14 const CONSTANT = 'Hello World'; 15 echo CONSTANT;//Hello World9
登录后复制

以上就是理解和比较PHP7新特性的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:web前端程序员是做什么
下一篇:什么是laravel

发表评论

关闭广告
关闭广告