1

リフレクションを使用してオブジェクトを作成しようとすると、このエラーを回避できず、毎回このエラーが発生します。

これが私のコードです:

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();
}

最初のエコーは「\domain\Member」を出力します。これは私が渡したものであり、オブジェクトを作成しようとしているクラスであるため、正しいです。

次に、エコーは「YES」を出力します。クラスが存在します!

次に $klass を ReflectionClass に渡します。

次の print_r は以下を出力します。

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

ドメインがなくなる前の \ に注意してください。問題の一部でしょうか?

次に、 newInstance() を呼び出すと、エラーが発生します。

致命的なエラー: クラス名は、53 行目の C:\Users\Zack\PhpstormProjects\MyApp\base\Registry.php の有効なオブジェクトまたは文字列でなければなりません

だから、何が問題なのかわからない。Member クラスはドメイン名前空間に存在します。メンバーの何かが間違っている可能性がある場合に備えて、ここにあります。まだあまりありません:

<?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

1 に答える 1

4

new最終行には必要ありません。代わりに次のようにする必要があります。

return $mapperClass->newInstance();

実際に何が起こっているかというと、Member のインスタンスを取得し、そのインスタンスをクラス名として new に渡しています。そのため、 PHP は をreturn new {instance of Member}認識しており、オブジェクトのインスタンスが有効なクラス名ではないと不平を言っています。

于 2013-06-01T22:52:23.670 に答える