首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法实例化动态类

问无法实例化动态类
EN

Stack Overflow用户
提问于 2013-02-28 06:28:18
回答 2查看 68关注 0票数 0

这让我很困惑。为什么第一行可以工作,而当我动态创建对象时,它却不能?

代码语言:javascript
复制
$a = new Strategy\NotificationStrategy(); // This works

$className = "Strategy\\NotificationStrategy";
var_dump(class_exists($className)); // bool(false)
$strategy = new $className(); // Fatal error: Class 'Strategy\NotificationStrategy' not found, etc..
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 06:52:34

命名空间在编译时解析。当你尝试从字符串创建对象时,你必须定义类的绝对路径。如下所示:

代码语言:javascript
复制
$className = "\\Vendor\\Package\\Strategy\\NotificationStrategy";

或

代码语言:javascript
复制
$className = __ NAMESPACE __."\\Strategy\\NotificationStrategy";
票数 1
EN

Stack Overflow用户

发布于 2013-02-28 06:57:01

嗯……我尝试了和你类似的方法:

strategy.php:

代码语言:javascript
复制
<?php
    namespace Strategy{

      class NotificationStrategy{
        public function hello(){ echo "Hi!\n"; }
      }
    }
?>

instantiate.php

代码语言:javascript
复制
<?php
  require 'strategy.php';

  $ns    = new Strategy\NotificationStrategy();
  $klass = "Strategy\\NotificationStrategy";
  $qq    = new $klass();

  $qq->hello(); // Hi!
?>

这对我来说很好,所以如果你有问题,这会让我认为你的动态调用在包含类定义的文件的include之前尝试触发了require issues...perhaps?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15123730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档