Tyl*_*ter 35 php static object
我想检查一个函数是否存在于我正在创建的库中,这是静态的.我见过函数和method_exists,但是没有找到允许我在相对上下文中调用它们的方法.这是一个更好的例子:
class myClass{
function test1()
{
if(method_exists("myClass", "test1"))
{
echo "Hi";
}
}
function test2()
{
if(method_exists($this, "test2"))
{
echo "Hi";
}
}
function test3()
{
if(method_exists(self, "test3"))
{
echo "Hi";
}
}
}
// Echos Hi
myClass::test1();
// Trys to use 'self' as a string instead of a constant
myClass::test3();
// Echos Hi
$obj = new myClass;
$obj->test2();
Run Code Online (Sandbox Code Playgroud)
如果函数存在,我需要能够使测试3回显Hi,而不需要将其从静态上下文中取出.鉴于访问该类的关键字应该是'self',因为$ this用于指定的类.
gap*_*ple 56
static::class
自PHP 5.5起可用,并将返回" Late Static Binding "类名:
class myClass {
public static function test()
{
echo static::class.'::test()';
}
}
class subClass extends myClass {}
subClass::test() // should print "subClass::test()"
Run Code Online (Sandbox Code Playgroud)
get_called_class()
做同样的事情,并在PHP 5.3中引入
class myClass {
public static function test()
{
echo get_called_class().'::test()';
}
}
class subClass extends myClass {}
subClass::test() // should print "subClass::test()"
Run Code Online (Sandbox Code Playgroud)
该get_class()
函数,从php 5.0.0开始,如果在类中调用,则不需要任何参数,将返回声明函数的类的名称(例如,父类):
class myClass {
public static function test()
{
echo get_class().'::test()';
}
}
class subClass extends myClass {}
subClass::test() // prints "myClass::test()"
Run Code Online (Sandbox Code Playgroud)
该__CLASS__
魔术不断做同样[ 链接 ].
class myClass {
public static function test()
{
echo __CLASS__.'::test()';
}
}
class subClass extends myClass {}
subClass::test() // prints "myClass::test()"
Run Code Online (Sandbox Code Playgroud)
hob*_*ave 12
啊,抱歉。我暂时失明了 :) 你会想要使用魔法常量 __CLASS__
例如
if (method_exists(__CLASS__, "test3")) { echo "Hi"; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35959 次 |
最近记录: |