function mainFunction() {
functionA(5, "blah");
functionB("ok", "whatever");
}
如何編寫函數GetFunctions
返回mainFunction
內的函數?是否有可能在PHP中使用方法獲取語句?
如何用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?
請不要這樣做,有一定更好的方法做,你實際上是試圖完成。 – Nicole 2012-03-16 20:02:44
你想達到什麼目的?有一個非常(非常)很好的機會,有比這更好的方法。 – 2012-03-16 20:04:28
@NickC - 是的,這可能是一個壞主意,但你不知道情況,也許沒有別的選擇。也許他所做的是完全安全的。 – 2012-03-16 20:04:59