dsjgk330337 2014-01-03 01:55
浏览 83

命名空间实例化通过变量

namespace user;
use robot;

$namespace = 'r\someClass';
$class = new $namespace();  // does not work

$namespace = 'obot\someClass';
$class = new $namespace();  // does work

Why doesn't this work as expected?

The reason I am using a variable is b/c "someClass" isn't known ahead of time.

So the code looks like this:

if ( $class == 'someClass' )
{
   $namespace = 'r\someClass';
}
elseif ( $class == 'someOtherClass' )
{
   $namespace = 'r\someOtherClass';
}

$class = new $namespace();

This is easy to work around, but I don't understand why:

$class = new r\someClass() will work and $class = new $namespace() will not work.

  • 写回答

3条回答 默认 最新

  • duanpa1980 2014-01-03 02:00
    关注

    Updated:

    When you use dynamic class name, you have to include the namespace name.

    So the below will work:

    namespace user;
    use robot; // use is not necessary when you use dynamic class name.
    
    $namespace = 'robot\someClass'; // for a dynamic class name, namespace is required.
    $class = new $namespace();
    

    Note the leading slash is not necessary, because there is no difference between a qualified and a fully qualified Name inside a dynamic class name, function name, or constant name.

    Check the document here.

    评论

报告相同问题?

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算