Rumah > Soal Jawab > teks badan
// 项目使用 `composer`
// 重新封装了 redis
use cache\Redis;
// 因为封装了几种缓存方式 如:file,memcache
// 所以想要这种 字符串 的方式来 new 类
// 但是这个方式直接报错,没有重名问题
$class = 'Redis';
$instance = new $class($options);
// 如果直接 new,就没有问题,可以正常运行
$instance = new Redis($options);
Ralat pertama macam ni PHP Fatal error: Class 'Redis' not found
.
Jika saya tidak menggunakan autoloading ruang nama dan menggunakan include file
, tiada masalah dengan kaedah pertama dan kedua.
Apakah prinsip dan cara menyelesaikannya.
世界只因有你2017-06-29 10:10:15
Apabila menggunakan ruang nama dan membuat instantiation pembolehubah sebagai nama kelas, 需要包含完整的命名空间
tambah ruang nama terus ke tempat instantiasi
$cls_name = 'Redis';
$class = "\cache\Redis\".$cls_name;
$instance = new $class($options);
高洛峰2017-06-29 10:10:15
Memerlukan ruang nama penuh
use cache\Redis;
$class = Redis::class;//需要完整的命名空间
$instance = new $class($options);
ATAU
$class = '\cache\Redis';
//$class = \cache\Redis::class;
$instance = new $class($options);