是否有可能在PHP中的方法中获取语句?

时间:2012-03-16 19:59:10

标签: php

function mainFunction() {
  functionA(5, "blah");
  functionB("ok", "whatever");
}

如何编写一个返回GetFunctions内函数的函数mainFunction

如何使用mainFunction中提供的参数调用它们?

如何按如下方式调用它们?

foreach (GetFunctions(mainFunction) as $function) {
  print "Calling function $function: ";
  call($functionA); // called with parameters(5, "blah")
}

使用PHP 5.2.8

编辑:好的,这是一个更完整的解释。我试图让它变得简单易懂,但显然这不是一个好主意。

目标是在给定的静态方法中调用每个 断言 。我正在编写一个测试框架。每个断言都返回true或false。

我调用的方法如下。

$methods = get_class_methods('LibraryTests');
foreach ($methods as $method) {
    if ( StartsWith($method, 'Test') ) {
        print "calling: " . $method . ": ";
        call_user_func('LibraryTests::' . $method);
    }
}   

上面的代码调用了类中的每个方法,但我想单独调用每个断言并跟踪结果(true / false)。 CallAssertion应该调用每个断言(例如TestUnit::AssertEqual(GetFormattedHour(5), "5 PM");)。这是我要问的方法。

这是班级:

class LibraryTests extends TestUnit {

    static $success = 0;
    static $failure = 0;
    static $total = 0;

    static function CallAssertion($assertion) {
        self::$total += 1;
        if ($assertion) { self::$success += 1; }
        else { self::$failure += 1; }
    }

    static function TestGetFormattedHour() {
        TestUnit::AssertEqual(GetFormattedHour(5), "5 PM");
        TestUnit::AssertEqual(GetFormattedHour(16), "4 PM");
    }

那么,问题是,如何编写CallAssertion?

4 个答案:

答案 0 :(得分:2)

你不能。

相反,创建一个类并使用反射来获取它的方法。

无论如何,你需要找出为什么这是必要的,看看是否有一种完全不同的方法可以使用。

(如果这是出于调试目的,您可以使用debug_backtrace进行检查,但其目的不是调用您在问题中描述的功能。)

答案 1 :(得分:1)

嗯,你实际上试图解决什么问题。对我来说,这听起来像是在尝试在运行时检查调用堆栈。如果是这样,我建议您使用debug_backtrace()src)。

我不会建议在生产中使用该功能,因为它对您的代码造成了相当大的打击。

答案 2 :(得分:1)

一种可能性是在包含main_function的PHP文件上执行file_get_contents,然后通过它来解析main_function及其调用的函数。当然,我不知道你的情况,所以可能行不通。

答案 3 :(得分:0)

你可以这样做:

http://php.net/manual/en/function.token-get-all.php

可能是一个坏主意,但祝你好运!