PHP 關於 new 的使用
typecho
typecho 2017-06-29 10:08:15
0
3
781
// 项目使用 `composer`
// 重新封装了 redis
use cache\Redis;

// 因为封装了几种缓存方式 如:file,memcache
// 所以想要这种 字符串 的方式来 new 类
// 但是这个方式直接报错,没有重名问题
$class = 'Redis';
$instance = new $class($options);

// 如果直接 new,就没有问题,可以正常运行
$instance = new Redis($options);

第一種報錯是這樣的 PHP Fatal error: Class 'Redis' not found.

如果我不使用命名空間自動載入,使用include file,第一種和第二種都沒有問題.

這個是什麼原理,怎麼解決?謝謝了.

typecho
typecho

Following the voice in heart.

全部回覆(3)
世界只因有你

使用命名空間,以變數為類別名稱實例化的時候,需要包含完整的命名空間,在實例化的地方直接加命名空間


$cls_name = 'Redis';
$class = "\cache\Redis\".$cls_name;
$instance = new $class($options);
小葫芦

需要完整的命名空間

use cache\Redis;

$class = Redis::class;//需要完整的命名空间
$instance = new $class($options);

OR


$class = '\cache\Redis';
//$class = \cache\Redis::class;
$instance = new $class($options);
三叔

已經解決了,謝謝了.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板