cari

Rumah  >  Soal Jawab  >  teks badan

PHP tentang penggunaan baru

// 项目使用 `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.

typechotypecho2750 hari yang lalu813

membalas semua(3)saya akan balas

  • 世界只因有你

    世界只因有你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);

    balas
    0
  • 高洛峰

    高洛峰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);
    

    balas
    0
  • 三叔

    三叔2017-06-29 10:10:15

    Telah selesai, terima kasih.

    balas
    0
  • Batalbalas