120
public class MyClass {

}

Javaでは、クラス名を取得できますString className = MyClass.class.getSimpleName();

PHPでこれを行う方法は?私はすでに知っていget_class()ますが、それはオブジェクトに対してのみ機能します。現在、私はアクティブレコードで働いています。のようなステートメントが必要ですMyClass::className

4

10 に答える 10

143

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()を使用できます。

于 2014-09-24T13:06:25.887 に答える
32

__CLASS__クラス内で使用して名前を取得できます。

http://php.net/manual/en/language.constants.predefined.php

于 2013-02-27T03:47:42.307 に答える
30

自分の質問に答えたようですね。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'
于 2013-02-27T04:11:44.123 に答える
11

今、私は私の問題に対する答えを持っています。リンクを提供してくれた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" 
于 2013-02-27T04:27:35.440 に答える