ley*_*cua 18 php oop reflection
我知道classPHP 5.5上有一个静态字段,但我必须坚持使用PHP 5.4.是否可以从变量中获取完全限定的类名?
例:
namespace My\Awesome\Namespace
class Foo {
}
Run Code Online (Sandbox Code Playgroud)
以及代码中的其他地方:
public function bar() {
$var = new \My\Awesome\Namespace\Foo();
// maybe there's something like this??
$fullClassName = get_qualified_classname($var);
// outputs 'My\Awesome\Namespace\Foo'
echo $fullClassName
}
Run Code Online (Sandbox Code Playgroud)
Sha*_*ran 23
你应该使用 get_class
如果您正在使用命名空间,则此函数将返回包含命名空间的类的名称,因此请注意您的代码是否对此进行了任何检查.
namespace Shop;
<?php
class Foo
{
public function __construct()
{
echo "Foo";
}
}
//Different file
include('inc/Shop.class.php');
$test = new Shop\Foo();
echo get_class($test);//returns Shop\Foo
Run Code Online (Sandbox Code Playgroud)
这是一个直接复制粘贴示例 here
Nig*_*way 13
我知道这是一个老问题,但对于仍然发现这一点的人,我会建议这种方法:
namespace Foo;
class Bar
{
public static function fqcn()
{
return __CLASS__;
}
}
// Usage:
use Foo\Bar;
// ...
Bar::fqcn(); // Return a string of Foo\Bar
Run Code Online (Sandbox Code Playgroud)
如果使用PHP 5.5,您可以这样做:
namespace Foo;
class Bar
{}
// Usage:
use Foo\Bar;
// ...
Bar::class; // Return a string of Foo\Bar
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
对::类更多信息在这里.
对于使用 PHP 8.0 及更高版本的开发人员,您现在无需get_class.
PHP8 引入了对 on 对象的支持::class。例子:
public function bar() {
$var = new \My\Awesome\Namespace\Foo();
echo $var::class;
}
Run Code Online (Sandbox Code Playgroud)
请参阅RFC以获取更多信息。
| 归档时间: |
|
| 查看次数: |
17793 次 |
| 最近记录: |