2013-06-01 53 views
1

我似乎無法解決此錯誤,當我嘗試使用反射創建對象並每次都得到此錯誤時。PHP ReflectionClass - 致命錯誤:類名稱必須是有效的對象或字符串

這裏是我的代碼:

public static function getMapper($klass) { 
    echo $klass; 
    if(class_exists($klass)) { 
     echo "YES!"; 
    } else { 
     echo "NO!"; 
    } 

    $mapperClass = new \ReflectionClass($klass); 
    print_r($mapperClass); 
    return new $mapperClass->newInstance(); 
} 

第一回聲打印 「\域\會員」。這是正確的,因爲它是我通過的,並且它是我正在嘗試創建Object的類。

接下來,回顯打印「是」。這個課存在!

接下來,我通過$克拉斯到ReflectionClass和...

下的print_r打印:

ReflectionClass Object ([name] => domain\Member) 

看到\域消失之前。可能是問題的一部分?

然後,當我調用newInstance()我得到錯誤。

致命錯誤:類名必須是一個有效的對象或在C字符串:\用戶\扎克\ PhpstormProjects \ MyApp的\基地\ Registry.php上線53

所以我不知道是什麼問題是。成員類存在於域名空間中。以防偶像中的某些東西是錯誤的,在這裏;還沒有太多:

<?php 

namespace domain; 

use base\Registry; 
use domain\base\BaseMember; 

class Member extends BaseMember { 

/** 
* @param $displayName 
* @return Member 
*/ 
public static function findMemberByDisplayName($displayName) { 
    return Registry::memberRepository()->findMemberByDisplayName($displayName); 
} 

回答

4

你不需要在最後一行new。它應該是這個:

return $mapperClass->newInstance(); 

什麼是實際發生的事情,是你得到會員的一個實例,然後該實例傳遞的類名新。所以PHP看到了return new {instance of Member},它抱怨對象的實例不是有效的類名。

+0

呃,它總是那麼小...... – user1513171

相關問題