suchen

Heim  >  Fragen und Antworten  >  Hauptteil

PHP über die Verwendung von new

// 项目使用 `composer`
// 重新封装了 redis
use cache\Redis;

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

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

Der erste Fehler ist so PHP Fatal error: Class 'Redis' not found.

Wenn ich das automatische Laden von Namespaces nicht verwende und include file verwende, gibt es mit der ersten und zweiten Methode kein Problem.

Was ist das Prinzip und wie kann man es lösen? Danke.

typechotypecho2751 Tage vor814

Antworte allen(3)Ich werde antworten

  • 世界只因有你

    世界只因有你2017-06-29 10:10:15

    使用命名空间,以变量为类名实例化的时候,需要包含完整的命名空间,在实例化的地方直接加命名空间

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

    Antwort
    0
  • 高洛峰

    高洛峰2017-06-29 10:10:15

    需要完整的命名空间

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

    OR

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

    Antwort
    0
  • 三叔

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

    已经解决了,谢谢了.

    Antwort
    0
  • StornierenAntwort