4

私は少し問題に直面しています。変数にクラス名があり、それをインスタンス化する必要がありますが、変数がクラスとまったく同じケースであることを知る方法がありません。

例:

//The class I'm fetching is named "App_Utils_MyClass"
$var = "myclass";
$className = "App_Utils_".$var;
$obj = new $className();

どうすればこれを機能させることができますか?

追加情報:

  • このスニペットの前に、必要なクラスが実際に存在することを確認するためのclass_exists()チェック (大文字と小文字を区別しない) があります。
  • クラス名は常に適切にキャメルケースです (例: MySuperAwesomeClass)。
4

1 に答える 1

8

一般に信じられていることとは反対に、PHP の関数名は、クラス コンストラクターと同様に大文字と小文字を区別しません。あなたcaseはすでに動作しているはずです。これを試して

<?php
class TestClass {
    var $testValue; 
}


$a=new testclass();
$b=new TestClass();
$c=new TESTCLASS();
print_r($a);
print_r($b);
print_r($c);

?> 

PHPマニュアルによると

注: 関数名は大文字と小文字を区別しませんが、通常は宣言に表示されているとおりに関数を呼び出すのが適切な形式です。

これは、クラス メソッドにも適用されます。

回避策/これらのクラスに名前を付けるより良い方法

以下は、クラス名が常にあなたが定義したとおりの正確な大文字と小文字になることを保証します。どのcaseユーザーが入力しても関係ありません。

<?php       
class TestClass {
    var $testValue; 
}


$userEnteredValue="testCLASS";
$myClasses=get_declared_classes();
$classNameIndex=array_search(strtolower($userEnteredValue), array_map('strtolower', $myClasses));
if($classNameIndex!==FALSE)
{
    $classNameShouldBe=$myClasses[$classNameIndex];
      echo $classNameShouldBe;
}
else
{
    echo "This class is undefined";
}




?>
于 2013-04-23T14:11:04.867 に答える