あなたがあなた自身の質問に答えのように聞こえます。 get_class
がクラス名を取得します。それは手続き的なものであり、それが混乱の原因となっているかもしれません。あなたが行うことができます今すぐ
<?php
class MyClass
{
public static function getClass()
{
return get_class();
}
}
:
<?php
class foo
{
function name()
{
echo "My name is " , get_class($this) , "\n";
}
}
// create an object
$bar = new foo();
// external call
echo "Its name is " , get_class($bar) , "\n"; // It's name is foo
// internal call
$bar->name(); // My name is foo
が、それはより多くのあなたの例のようなあなたのような何かができるようにするには:ここで
get_class
のためのPHPのドキュメントを見てみましょうことはその例です。
$className = MyClass::getClass();
これは多少限定されていますが、私のクラスが拡張しても「MyClass」が返されます。比較的新しい機能であるLate Static Bindingに依存するget_called_class
を代わりに使用することができ、PHP> = 5.3が必要です。
<?php
class MyClass
{
public static function getClass()
{
return get_called_class();
}
public static function getDefiningClass()
{
return get_class();
}
}
class MyExtendedClass extends MyClass {}
$className = MyClass::getClass(); // 'MyClass'
$className = MyExtendedClass::getClass(); // 'MyExtendedClass'
$className = MyExtendedClass::getDefiningClass(); // 'MyClass'
それはPHPで役立つかもしれないときに特定の例を挙げてもらえますか?クラス名をハードコードした場合は、引用符で囲み、必要なものを得ることができます。 – zerkms
残念なことに、RenameClassのような自動リファクタリング(IDEなど)では、通常、このようなクラス名文字列の名前は変更されません。したがって、他のすべてのクラスと 'public $ __CLASS__ = __CLASS __;'ダンスを行うのとは別に、クラス名を取得するための何らかの静的な方法があるといいでしょう... – EricSchaefer
[クラス名を拡張PHPクラスの静的呼び出し?](https://stackoverflow.com/questions/506705/how-can-i-get-the-classname-from-a-static-call-in-an-extended-php -class) – Theraot