这似乎是一个相当简单的反射问题,但我无法理解。我在Debian上使用了Laravel4.2和PHP5.6.6-1。
最基本的情况是,我想从Laravel QueueHandler中的类中生成一个新对象,如下所示:
$className = 'MyClass';
$myobject = new $className ();但这不管用。我试过了我能想到的一切,却不知道该去哪里找。此代码不工作,而它应该:
<?php
use Pronamic\Twinfield\Secure\Config;
use Pronamic\Twinfield\Customer\CustomerFactory;
class TwinfieldQueueHandler {
private $twinfieldConfig = null;..。
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());
}有没有人有关于在哪里查找和如何调试它的指示呢?
发布于 2015-03-11 17:03:01
ReflectionClass将完全忽略当前的命名空间和use语句。您必须指定类的完全限定名称:
$r = new ReflectionClass('Pronamic\Twinfield\Customer\CustomerFactory');正如用户在php.net上指出的那样
要在PHP5.3中反映名称空间类,必须始终指定类的完全限定名--即使您已经使用"use“语句对包含的命名空间进行别名化。
请注意,您可以通过传递一个对象来解决这个问题:
$test0 = new CustomerFactory ($this->twinfieldConfig);
$r = new ReflectionClass($test0);https://stackoverflow.com/questions/28990110
复制相似问题