public class MyClass {
}
Java에서는 다음과 같이 클래스 이름을 얻을 수 있습니다. String className = MyClass.class.getSimpleName();
PHP에서 어떻게할까요? 나는 이미 알고 get_class()
있지만 객체에 대해서만 작동합니다. 현재 저는 Active Record에서 일하고 있습니다. 나는 같은 진술이 필요합니다 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 ()를 사용할 수 있습니다 .
답변
답변
질문에 답하신 것 같습니다. 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’를 반환하기 때문에 이것은 다소 제한적입니다. get_called_class
대신 상대적으로 새로운 기능인 Late Static Binding 에 의존 하고 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 덕분에 여기 에서 답을 찾을 수 있습니다 . 그리고 아이디어에 대해 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"
답변
클래스 이름을 얻으려면 ReflectionClass를 사용할 수 있습니다.
class MyClass {
public function myNameIs(){
return (new \ReflectionClass($this))->getShortName();
}
}
답변
ReflectionClass
꽤 생산적인 옵션 인 것 같습니다 .
class MyClass {
public function test() {
// 'MyClass'
return (new \ReflectionClass($this))->getShortName();
}
}
기준:
Method Name Iterations Average Time Ops/second
-------------- ------------ -------------- -------------
testExplode : [10,000 ] [0.0000020221710] [494,518.01547]
testSubstring : [10,000 ] [0.0000017177343] [582,162.19968]
testReflection: [10,000 ] [0.0000015984058] [625,623.34059]
답변
PHP에서 ‘self’와 ‘static’의 차이를 거의 언급하지 않는 것이 중요하다고 생각합니다.
<?php
class X {
function getStatic() {
// gets THIS class of instance of object
// that extends class in which is definied function
return static::class;
}
function getSelf() {
// gets THIS class of class in which function is declared
return self::class;
}
}
class Y extends X {
}
class Z extends Y {
}
$x = new X();
$y = new Y();
$z = new Z();
echo 'X:' . $x->getStatic() . ', ' . $x->getSelf() .
', Y: ' . $y->getStatic() . ', ' . $y->getSelf() .
', Z: ' . $z->getStatic() . ', ' . $z->getSelf();
결과 :
X: X, X
Y: Y, X
Z: Z, X