相关疑难解决方法(0)

找出静态类中是否存在方法

我想检查一个函数是否存在于我正在创建的库中,这是静态的.我见过函数和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用于指定的类.

php static object

35
推荐指数
2
解决办法
4万
查看次数

检查功能是否存在

检查ia函数存在时遇到问题 - 我知道function_exists()和method_exists()但是无法获得我寻找的功能

我通过套接字连接传递函数,如$ MM-> Player-> Play().之后我评估它们并通过套接字连接返回结果.

我做过滤功能(必须从$ MM开始,其他任何东西都将被拒绝),但我无法获取我的代码来检查函数是否存在.这很重要,因为如果函数不存在,服务器将崩溃.

任何人都知道这个解决方案?

提前致谢.

代码:

$MM = new SDBApplication;

在SDBApplication的构造函数中:

$this->Player = new SDBPlayer;

我尝试了以下方法来检查:代码:

method_exists($MM, "Player::Play"); function_exist("$MM->Player->Play);

即使函数存在,它们都返回false

解决方案

$parts = explode('->', $string);
$numParts = count($parts)-1;
$object = '$MM';
for($i=0; $i < $numParts; $i++){
    $object .= '->'.$parts[$i];
}
$parts[$numParts+1] = preg_replace('(\\(.*\\))', '', $parts[$numParts]);
eval( '$check = method_exists('.$object.', '.$parts[$numParts+1].');');
Run Code Online (Sandbox Code Playgroud)

它需要进行评估,因为输入是一个字符串.

php

1
推荐指数
1
解决办法
5056
查看次数

标签 统计

php ×2

object ×1

static ×1