thisとthisのような質問がありましたが、名前空間を既に持っていてクラスがエイリアス化されている場合は、名前空間:別名ネームスペースの文字列名から新しいクラスインスタンスを作成
<?php
namespace my\project;
require 'vendor/autoload.php';
//Example aliased classes, more may be defined elsewhere
use League\OAuth2\Client\Provider\Google;
use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
//This is mapped from a submitted form value
$provider = 'Google';
$g = new $provider;
これはPHP Fatal error: Class 'Google' not found
をスローします。これらの質問では、__NAMESPACE__
という接頭辞を付ける必要がありますが、問題はこれらのクラスがmy\project
名前空間にないために存在しないため、どちらも機能しないということです。クラス名はmy\project\Google
です。
この特定のコードのダンプ修正は、すべての名前空間とクラス名を格納するために配列を使用することですが、事前にすべてのクラス名がわからないとうまくいかない場合があります。
同じ理由でエイリアスクラスの反射オブジェクトを作成できないため、これを解決するためにリフレクションを使用する方法がわかりません。new \ReflectionClass($provider);
は同じエラーをスローします。
エイリアスクラス名の名前空間を動的に取得するにはどうすればよいですか?
「リーグ\ OAuth2 \ Client \ Provider \ GoogleをGoogleとして試してみよう」 – Xorifelse
@ Xorifelse、それは私が持っているものと同じです – Synchro