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?
答案 0 :(得分:2)
你不能。
相反,创建一个类并使用反射来获取它的方法。
无论如何,你需要找出为什么这是必要的,看看是否有一种完全不同的方法可以使用。
(如果这是出于调试目的,您可以使用debug_backtrace进行检查,但其目的不是调用您在问题中描述的功能。)
答案 1 :(得分:1)
debug_backtrace()
(src)。
我不会建议在生产中使用该功能,因为它对您的代码造成了相当大的打击。
答案 2 :(得分:1)
一种可能性是在包含main_function
的PHP文件上执行file_get_contents,然后通过它来解析main_function
及其调用的函数。当然,我不知道你的情况,所以可能行不通。
答案 3 :(得分:0)