首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php Laravel 4中奇怪的反射行为

php Laravel 4中奇怪的反射行为
EN

Stack Overflow用户
提问于 2015-03-11 15:01:10
回答 1查看 145关注 0票数 1

这似乎是一个相当简单的反射问题,但我无法理解。我在Debian上使用了Laravel4.2和PHP5.6.6-1。

最基本的情况是,我想从Laravel QueueHandler中的类中生成一个新对象,如下所示:

代码语言:javascript
复制
$className = 'MyClass';
$myobject = new $className ();

但这不管用。我试过了我能想到的一切,却不知道该去哪里找。此代码不工作,而它应该:

代码语言:javascript
复制
<?php
use Pronamic\Twinfield\Secure\Config;
use Pronamic\Twinfield\Customer\CustomerFactory;

class TwinfieldQueueHandler {
  private $twinfieldConfig = null;

..。

代码语言:javascript
复制
try {
  $twinfieldFactoryClass = 'CustomerFactory';

  //returns 0
  echo strcmp('CustomerFactory', $twinfieldFactoryClass);

  //works
  $test0 = new CustomerFactory ($this->twinfieldConfig);

  //throws an exeption with message:  "Class CustomerFactory does not exist"
  $r = new ReflectionClass($twinfieldFactoryClass);
  $test1 = $r->newInstanceArgs($this->twinfieldConfig);

  //gives error PHP Fatal error:  Class 'CustomerFactory' not found in {file} on line {line}
  $test2 = new $twinfieldFactoryClass ($this->twinfieldConfig);

} catch (Exception $e) {
  Log::error($e->getMessage());
}

有没有人有关于在哪里查找和如何调试它的指示呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-11 17:03:01

ReflectionClass将完全忽略当前的命名空间和use语句。您必须指定类的完全限定名称:

代码语言:javascript
复制
$r = new ReflectionClass('Pronamic\Twinfield\Customer\CustomerFactory');

正如用户在php.net上指出的那样

要在PHP5.3中反映名称空间类,必须始终指定类的完全限定名--即使您已经使用"use“语句对包含的命名空间进行别名化。

请注意,您可以通过传递一个对象来解决这个问题:

代码语言:javascript
复制
$test0 = new CustomerFactory ($this->twinfieldConfig);

$r = new ReflectionClass($test0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28990110

复制
相关文章

相似问题

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