::class的作用和使用示例

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
error_reporting(-1);


$instance1 = new Redis();
var_dump($instance1);
// object(Redis)#2 (0) {
// }


// 获取$instance1的类名
var_dump($instance1::class); // string(5) "Redis"


// 使用类名创建实例
$instance2 = new ($instance1::class)();
var_dump($instance2);
// object(Redis)#3 (0) {
// }


// 使用类名进行反射
try {
    $reflection = new ReflectionClass($instance1::class);
} catch (ReflectionException $e) {
    exit('ReflectionException: ' . $e->getMessage());
}
$name = $reflection->getName();
$method = 'set';
if ($reflection->hasMethod($method)) {
    echo "存在$name::$method()方法" . PHP_EOL; // 存在Redis::set()方法
} else {
    echo "不存在$name::$method()方法" . PHP_EOL;
}


//========== 总结 ==========//
// 1、$instance::class的作用是获取$instance的类名,在不知道一个实例的类名的情况下可以使用::class来获取其类名,
//    然后使用获取到的类名来创建新实例或进行反射。

Copyright © 2024 码农人生. All Rights Reserved