PHP7.1-PHP7.4 新特征

自定义方法声明传入参数类型

function ace(int $abc,string $bc){
	//return ['abc'=>$abc,'bc'=>$bc];
}

var_dump(ace('123','qwe'));

自定义方法声明返回值类型

function ace(int $abc,string $bc):array{
	return ['abc'=>$abc,'bc'=>$bc];
}

var_dump(ace('123','qwe'));

NULL合并运算符

$a = '123';

$a = $a ?? 'abc'; // isset($a) ? $a : 'abc';

echo $a; //return 123

-------------------------------------------------------
$a = '123';

$a = $a ?: 'abc'; // $a ? $a : 'abc';

echo $a;

组合比较符

echo 1 <=> 1; // 0
echo '<br>';
echo 1 <=> 2; // -1
echo '<br>';
echo 2 <=> 1; // 1

定义常量数组

define('ABC',['999','888','777']);

echo ABC[1]; //888

绑定方法并闭包试用

class ABC
{
    private $a = 1;
    protected $b = 2;
}


// PHP 7 之前版本的代码

$getABC = function() {return $this->a;};

$getA = $getABC->bindTo(new ABC, 'ABC'); // 中间层闭包

echo $getA();

echo '<br>';

// PHP 7+ 版本的代码

$getABC = function() {return $this->b;};

echo $getABC->call(new ABC);

序列化过滤参数

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" => false]);

// 转换所有对象到 __PHP_Incomplete_Class 对象,只允许 MyClass1 和 MyClass2 转换到 __PHP_Incomplete_Class
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);

print($data->obj1prop);
print(PHP_EOL);
print($data2->obj2prop);

IntlChar
新的 IntlChar 类暴露出 ICU 中的 Unicode 字符特性。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符(若要使用此类,请先安装Intl扩展)

printf('%x', IntlChar::CODEPOINT_MAX);  //10ffff
echo IntlChar::charName('@');  //COMMERCIAL AT
var_dump(IntlChar::ispunct('!'));  //bool(true)

生成随机数

//加密生存被保护的伪随机字符串
//string random_bytes ( int $length )
var_dump(random_bytes(5));

//加密生存被保护的伪随机整数
//int random_int ( int $min , int $max )
var_dump(random_int(10,100));

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};

PHP7异常断言

$s = 123;
//断言(assert)在程序中的某个特定点该的表达式值为真。如果该表达式为假,就中断操作
assert(is_int($s));

//-----------------------------------------------------------------------------------------------------

//zend.assertions
//参数说明
//1 - 生成和执行代码 (开发模式)(默认)
//0 - 生成代码,但在执行时跳过它
//-1 - 不生成代码 (生产环境)

//assert.exception
//参数说明
//1 - 断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出 AssertionError 对象实例。
//0 - 使用或生成 Throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 PHP 5 兼容)

ini_set('zend.assertions', 0);

//跳过执行ture == false 不产生错误信息
assert(true == false);
echo 'Hi!';

//return Hi!

//-----------------------------------------------------------------------------------------------------

ini_set('zend.assertions', 1);
ini_set('assert.exception', 1);

assert(true == false);
echo 'Hi!';

//return  Fatal error: Uncaught AssertionError: assert(true == false) in D:\phpstudy_pro\WWW\index.php:27 Stack trace: #0 D:\phpstudy_pro\WWW\index.php(27): assert(false, 'assert(true == ...') #1 {main} thrown in D:\phpstudy_pro\WWW\index.php on line 27

错误处理

class MathOperations 
{
   protected $n = 10;

   // 求余数运算,除数为 0,抛出异常
   public function doOperation(): string  //声明返回值为字符串,但最终返回值是数字类型
   {
      try {
         $value = $this->n % 0;
         return $value;
      } catch (DivisionByZeroError $e) {
         return $e->getMessage();  //Modulo by zero
      }
   }
}

$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());

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

echo intdiv(9,3),PHP_EOL; // 3
echo intdiv(10,3),PHP_EOL;  // 3
echo intdiv(5,10),PHP_EOL;  // 0

Session
session_start() 函数可以接收一个数组作为参数,可以覆盖 php.ini 中 session 的配置项

session_start([
   'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文件
    'cookie_lifetime'=>3600,   //SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废
    'read_and_close'=>true   //在读取完会话数据之后, 立即关闭会话存储文件,不做任何修改
]);
$_SESSION['name']='quan';
echo $_SESSION['name'];

PHP7废弃特性

  1. PHP4 风格的构造函数
    在 PHP4 中类中的函数可以与类名同名,这一特性在 PHP7 中被废弃,同时会发出一个 E_DEPRECATED 错误。当方法名与类名相同,且类不在命名空间中,同时PHP5的构造函数(__construct)不存在时,会产生一个 E_DEPRECATED 错误
class A {
   function A() {
      print('Style Constructor');
   }
}
//return Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; A has a deprecated constructor in...
  1. 以静态的方式调用非静态方法
    以静态的方式调用非静态方法,不再支持
class A {
   function b() {
      print('Non-static call');
   }
}
A::b();

//return Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
  1. password_hash() 随机因子选项
    函数原 salt 量不再需要由开发者提供了。函数内部默认带有 salt 能力,无需开发者提供 salt 值

  2. capture_session_meta SSL 上下文选项
    废弃了 “capture_session_meta” SSL 上下文选项。 在流资源上活动的加密相关的元数据可以通过 stream_get_meta_data() 的返回值访问

PHP7移除的扩展

  • ereg
  • mssql
  • mysql
  • sybase_ct

PHP7移除的SAPI

  • aolserver
  • apache
  • apache_hooks
  • apache2filter
  • caudium
  • continuity
  • isapi
  • milter
  • nsapi
  • phttpd
  • pi3web
  • roxen
  • thttpd
  • tux
  • webjames
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
升级 PHP 版本需要先了解您的服务器环境,比如是在 Windows 还是 Linux 系统上,使用的是 Apache 还是 Nginx 服务器,以及 PHP 是否使用了一些扩展库等等。这里提供一个大致的步骤供参考: 1.备份原有数据和配置文件,以便回滚。 2.更操作系统和依赖库。 - CentOS/RHEL:`yum update` - Ubuntu/Debian:`apt-get update && apt-get upgrade` 3.添加 PHP 7.4 的软件源。 - CentOS/RHEL:`yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm` - Ubuntu/Debian:`add-apt-repository ppa:ondrej/php && apt-get update` 4.安装 PHP 7.4。 - CentOS/RHEL:`yum install php74w` - Ubuntu/Debian:`apt-get install php7.4` 5.更 PHP 相关的扩展库。 - CentOS/RHEL:`yum install php74w-xxx` - Ubuntu/Debian:`apt-get install php7.4-xxx` 6.修改 Web 服务器的配置文件,将 PHP 解释器指向 7.4 版本。 - Apache:修改 `/etc/httpd/conf.d/php.conf` 文件中的 `LoadModule` 和 `AddHandler` 指令。 - Nginx:修改 `/etc/nginx/fastcgi.conf` 文件中的 `fastcgi_pass` 指令。 7.重启 Web 服务器。 - CentOS/RHEL:`systemctl restart httpd` - Ubuntu/Debian:`systemctl restart apache2` 或 `systemctl restart nginx` 请注意,升级 PHP 版本可能会涉及到一些 PHP 应用程序的兼容性问题,需要进行测试和调整。同时,升级前也需要确保所使用的 PHP 应用程序和扩展库都已经支持 PHP 7.4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值