public class MyClass {
}
Javaでは、クラス名を取得できますString className = MyClass.class.getSimpleName();
PHPでこれを行う方法は?私はすでに知っていget_class()
ますが、それはオブジェクトに対してのみ機能します。現在、私はアクティブレコードで働いています。のようなステートメントが必要ですMyClass::className
。
public class MyClass {
}
Javaでは、クラス名を取得できますString className = MyClass.class.getSimpleName();
PHPでこれを行う方法は?私はすでに知っていget_class()
ますが、それはオブジェクトに対してのみ機能します。現在、私はアクティブレコードで働いています。のようなステートメントが必要ですMyClass::className
。
PHP 5.5 以降、 ClassName::classを介してクラス名解決を使用できます。
PHP5.5 の新機能を参照してください。
<?php
namespace Name\Space;
class ClassName {}
echo ClassName::class;
?>
クラス メソッドでこの機能を使用する場合は、static::classを使用します。
<?php
namespace Name\Space;
class ClassName {
/**
* @return string
*/
public function getNameOfClass()
{
return static::class;
}
}
$obj = new ClassName();
echo $obj->getNameOfClass();
?>
古いバージョンの PHPでは、 get_class()を使用できます。
__CLASS__
クラス内で使用して名前を取得できます。
自分の質問に答えたようですね。get_class
クラス名を取得します。それは手続き的なものであり、おそらくそれが混乱を引き起こしているのです。のphpドキュメントを見てください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
あなたの例のようにするために、あなたは次のようなことをすることができます:
<?php
class MyClass
{
public static function getClass()
{
return get_class();
}
}
今、あなたはすることができます:
$className = MyClass::getClass();
ただし、これは多少制限されています。これは、クラスが拡張された場合でも「MyClass」が返されるためです。代わりに、比較的新しい機能であるLate Static Bindingget_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'
今、私は私の問題に対する答えを持っています。リンクを提供してくれたBradに感謝します。答えは hereにあります。そして、アイデアを提供してくれたJ.Moneyに感謝します。私の解決策:
<?php
class Model
{
public static function getClassName() {
return get_called_class();
}
}
class Product extends Model {}
class User extends Model {}
echo Product::getClassName(); // "Product"
echo User::getClassName(); // "User"