本篇文章给大家总结汇总了PHP5-8各版本特性,有需要的看看收藏阅读,希望对大家有所帮助!

php入门到就业线上直播课:进入学习
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用

PHP5-8各版本特性汇总

PHP5.1:

  • autoload
  • PDO
  • MySQLi
  • 类型约束

PHP5.2:

  • JSON 支持

PHP5.3:

  • 命名空间
  • 匿名函数
  • 闭包
  • 新增魔术方法__callStatic()__invoke()
  • 新增魔术变量__DIR__
  • 动态调用静态方法
  • 延迟静态绑定
  • Heredoc和 Nowdoc
  • 类外使用const定义常量
  • 三元运算符
  • Phar

PHP5.4:

  • Short Open Tag
  • 数组简写
  • Traits,
  • 内置 Web 服务器
  • 动态访问静态方法
  • 实例化时访问类成员

PHP5.5:

  • yield
  • list用于foreach
  • 细节修改

PHP5.6:

  • 常量增强
  • 命名空间增强
  • 可变函数参数

PHP7.0:

  • 标量类型声明
  • 返回值类型声明
  • defined定义常量数组
  • 匿名类
  • null合并运算符

PHP7.1:

  • 可为空类型
  • void类型
  • 多异常捕获

PHP7.2:

  • 新的对象object
  • 允许重写抽象方法

PHP7.3:语法层面没有很大的改变

PHP7.4:

  • 类型属性
  • 箭头函数
  • Null合并运算符支持方法
  • Opcache 预加载

PHP8.0:

  • JIT即时编译
  • 命名参数
  • 注解
  • 联合类型
  • Match表达式
  • Nullsafe 运算符
  • 构造器属性提升

PHP5.1


__autoload()魔术方法

这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。可以通过定义这个函数来启用类的自动加载。
function  __autoload($className) {  
    $filePath = “project/class/{$className}.php”;  
    if (is_readable($filePath)) {  
        require($filePath);  //这里可以只用require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。
    }  
}  
$a = new A();  
$b = new B();  
$c = new C();
  • PHP中__autoload()魔术方法详解

PDO

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。

安装

可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展。

//Linux
extension=pdo.so
//Windows  
extension=php_pdo.dll

使用

<?php
$dbms='mysql';     //数据库类型
$host='localhost'; //数据库主机名
$dbName='test';    //使用的数据库
$user='root';      //数据库连接用户名
$pass='';          //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";


try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    echo "连接成功<br/>";
    /*你还可以进行一次搜索操作
    foreach ($dbh->query('SELECT * from FOO') as $row) {
        print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
    }
    */
    $dbh = null;
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
  • PHP PDO

MySQLi

mysqli.dll是PHP对mysql新特性的一个扩展支持,允许访问MySQL 4.1及以上版本提供的功能。

mysql与mysqli的区别:

  • mysqli连接是永久连接,而mysql是非永久连接。

  • mysql连接每当第二次使用的时候,都会重新打开一个新的进程。mysqli连接一直都只使用同一个进程。

使用

$conn = mysqli_connect('localhost', 'root', '123', 'db_test') or ('error');
$sql = "select * from db_table";
$query = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($query)){
    echo $row['title'];
}
  • mysqli和mysql的区别是什么

类型约束

通过类型约束可以限制参数的类型,不过这一机制并不完善,目前仅适用于类和 callable(可执行类型) 以及 array(数组), 不适用于 string 和 int.

// 限制第一个参数为 MyClass, 第二个参数为可执行类型,第三个参数为数组
function MyFunction(MyClass $a, callable $b, array $c)
{
    // ...
}

PHP5.2


JSON

  • json_encode — 对变量进行 JSON 编码
  • json_decode — 对 JSON 格式的字符串进行解码

PHP5.3


命名空间

避免不同包中的类名或变量名产生冲突
<?php
namespace XXX; // 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。

匿名函数(闭包)

用来临时性地创建一个无名函数,用于回调函数等用途。
$func = function($arg)
{
    print $arg;
};
$func("Hello World! hovertree.top");

新增魔术方法__callStatic()__invoke()

__callStatic():用静态方式中调用一个不可访问方法时调用

__invoke() :以调用函数的方式调用一个对象时的回应方法

$person = new Person('小明'); // 初始赋值
$person(); //触发__invoke()

新增魔术变量__DIR__

获取当前执行的PHP脚本所在的目录

如当前执行的PHP文件为 /htdocs/index.php,则__FILE__等于’/htdocs/index.php’,而__DIR__等于’/htdocs’。

动态调用静态方法

public static function test($userName)
{
    //...
}

$className = 'cls';
$className::test('Tom'); // PHP >= 5.3.0

延迟静态绑定

PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定。

这是因为 self 的语义本来就是“当前类”,所以 PHP5.3 给 static 关键字赋予了一个新功能:后期静态绑定

class A
{
    static public function callFuncXXOO()
    {
        print self::funcXXOO();
    }
    static public function funcXXOO()
    {
        return "A::funcXXOO()";
    }
}
class B extends A
{
    static public function funcXXOO()
    {
        return "B::funcXXOO";
    }
}
$b = new B;
$b->callFuncXXOO(); //A::funcXXOO()
class A
{
    static public function callFuncXXOO()
    {
        print static::funcXXOO();
    }
    // ...
}
B::callFuncXXOO(); //B::funcXXOO()

类外使用const定义常量

常量是一个简单的标识符。在脚本执行期间该值不能改变(除了所谓的魔术常量,他们其实不是常量)。常量默认大小写敏感。通常常量标识符总是大写的。

可以用define()函数来定义常量。在php5.3.0以后,可以使用const关键字在类定义的外部定义常量,先前版本const关键字只能在类(class)中使用。一个常量一旦被定义,就不能再改变或取消定义。

const和define的区别?

  • const是一个语言结构,而define是一个函数。const在编译时要比define快很多。

const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。

  • Const可在类中使用,define不能

  • Const不能在条件语句中定义常量

  • const采用普通的常量名称,define可以采用表达式作为名称

  • const只能接受静态的标量,而define可以采用任何表达式

  • const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

  • PHP常量两种定义方法:define和const有什么区别

简化三元运算符

从PHP 5.3开始,通过排除中间表达式,甚至可以进一步简化三元语句。 如果测试表达式在布尔上下文中评估为true,则返回其值。 否则,将返回替代方法。

<?php
$favoriteColor = $_GET["color"] ?: "pink";

Phar

PHP5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件。

创建一个phar压缩包

$phar = new Phar('swoole.phar');
$phar->buildFromDirectory(__DIR__.'/../', '/.php$/');
$phar->compressFiles(Phar::GZ);
$phar->stopBuffering();
$phar->setStub($phar->createDefaultStub('lib_config.php'));

使用phar压缩包

include 'swoole.phar';
include 'swoole.phar/code/page.php';

使用phar可以很方便的打包你的代码,集成部署到线上机器。

  • php phar教程,PHP中phar包的使用教程

  • PHP 5.3中的新特性及被弃用的功能函数总结

  • PHP5各个版本的新功能和新特性总结

PHP5.4


Short Open Tag 短开放标签

自 PHP5.4 起总是可用。
//可以把
<?php echo $xxoo;?>
//简写成:  
<?= $xxoo;?>

数组简写

// 原来的数组写法
$arr = array("key" => "value", "key2" => "value2");
// 简写形式
$arr = ["key" => "value", "key2" => "value2"];

Traits

Traits是 PHP 多重继承的一种解决方案。PHP中无法进行多重继承,但一个类可以包含多个Traits
// Traits不能被单独实例化,只能被类所包含
trait SayWorld
{
    public function sayHello()
    {
        echo 'World!';
    }
}
class MyHelloWorld
{
    // 将SayWorld中的成员包含进来
    use SayWorld;
}

$xxoo = new MyHelloWorld();
// sayHello() 函数是来自 SayWorld 构件的
$xxoo->sayHello();

优先级

基类中的成员函数将被Traits中的函数覆盖,当前类中的成员函数将覆盖Traits中的函数。

  • php5.4新功能Traits介绍

内置 Web 服务器

PHP从5.4开始内置一个轻量级的Web服务器,不支持并发,定位是用于开发和调试环境。
在开发环境使用它的确非常方便。

php -S localhost:8000

动态访问静态方法

$func = "funcXXOO";
A::{$func}();

实例化时访问类成员

(new MyClass)->xxoo();
  • php5.4总结

PHP5.5


yield关键字

yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值。

function number10()
{
    for($i = 1; $i <= 10; $i += 1)
        yield $i;
}

list() 用于 foreach

$array = [
    [1, 2, 3],
    [4, 5, 6],
];
foreach ($array as list($a, $b, $c))
    echo "{$a} {$b} {$c}\n";

细节修改


  • 一文详解PHP5-8各版本特性【汇总】