是否可以在PHP中的方法中获取语句?
如何编写一个函数是否可以在PHP中的方法中获取语句?,php,Php,如何编写一个函数GetFunctions,返回main函数中的函数 如何使用main函数中给出的参数调用它们 如何称呼他们如下 function mainFunction() { functionA(5, "blah"); functionB("ok", "whatever"); } 在PHP5.2.8中工作 编辑:好的,这里有一个更完整的解释。我试图使它简单易懂,但显然这不是一个好主意 目标是在给定的静态方法中调用每个断言。我正在编写一个测试框架。每个断言都返回true或false
GetFunctions
,返回main函数中的函数
如何使用main函数中给出的参数调用它们
如何称呼他们如下
function mainFunction() {
functionA(5, "blah");
functionB("ok", "whatever");
}
在PHP5.2.8中工作
编辑:好的,这里有一个更完整的解释。我试图使它简单易懂,但显然这不是一个好主意
目标是在给定的静态方法中调用每个断言。我正在编写一个测试框架。每个断言都返回true或false
我调用的方法如下
foreach (GetFunctions(mainFunction) as $function) {
print "Calling function $function: ";
call($functionA); // called with parameters(5, "blah")
}
上面的代码调用类中的每个方法,但我想单独调用每个断言并跟踪结果(true/false)CallAssertion
应该调用每个断言(例如TestUnit::AssertEqual(GetFormattedHour(5),“5pm”);
)。这就是我要问的方法
下面是课堂:
$methods = get_class_methods('LibraryTests');
foreach ($methods as $method) {
if ( StartsWith($method, 'Test') ) {
print "calling: " . $method . ": ";
call_user_func('LibraryTests::' . $method);
}
}
所以,问题是,如何编写CallAssertion?您不能
相反,创建一个类并使用反射来获取其方法
不管怎样,您都需要弄清楚为什么这是必要的,并看看是否有一种完全不同的方法可以使用
(如果这是为了调试目的,您可以使用来检查,但其目的不是为了调用问题中描述的函数。)您不能
相反,创建一个类并使用反射来获取其方法
不管怎样,您都需要弄清楚为什么这是必要的,并看看是否有一种完全不同的方法可以使用
(如果这是为了调试目的,您可以使用来检查,但其目的不是为了调用问题中描述的函数。)嗯,您实际要解决的问题是什么。对我来说,这听起来像是在运行时检查调用堆栈。如果是这样,我建议只使用debug\u backtrace()
()
不过,我不建议在生产中大量使用该函数,因为它会对您的代码造成很大影响。嗯,您实际上想解决什么问题。对我来说,这听起来像是在运行时检查调用堆栈。如果是这样,我建议只使用debug\u backtrace()
()
不过,我不建议在生产中大量使用该函数,因为它会对您的代码造成相当大的影响。您可以使用:
也许是个坏主意,但祝你好运 您可以通过以下方式完成此操作:
也许是个坏主意,但祝你好运 一种可能是在PHP文件上创建一个包含main\u函数
的文件,获取其内容,然后遍历该文件,解析出main\u函数
及其调用的函数。当然,我不知道您的情况,所以这可能不起作用。一种可能是在包含main\u函数的PHP文件上创建一个文件获取内容,然后遍历该文件解析出main\u函数及其调用的函数。当然,我不知道你的情况,所以这可能不起作用。请不要这样做,肯定有更好的方法来完成你真正想要完成的事情。你想要实现什么?有一个非常(非常)好的机会有比这更好的方法。@NickC-是的,这可能是个坏主意,但你不知道情况,可能没有其他选择。也许他所做的是完全安全的。请不要这样做,肯定有更好的方法来完成你真正想要完成的事情。你想要实现什么?有一个非常(非常)好的机会有比这更好的方法。@NickC-是的,这可能是个坏主意,但你不知道情况,可能没有其他选择。也许他所做的是完全安全的。这不是他试图做的。他不是做这项工作吗?debug\u backtrace()
。无论如何,我将添加一个链接到它。它可以完成任务,即使建议只在开发时使用。这不是他试图做的。他不debug\u backtrace()
完成任务吗?他似乎不是为了调试而这样做的。不管怎样,我将添加一个链接到它。它完成了任务,即使它只建议在开发中使用。@drgomesp为什么不呢?对我来说似乎是一个合理的解决方案。从你以前遇到过的情况来看,这可能看起来很可笑,但如果我问一个问题,我想知道我能得到的任何想法,从我掌握的信息来看,我的想法似乎是可能的。我部分同意这个解决方案。主要问题是,如果将非常量值作为参数传递,则无法将其解为运行时值。这取决于问题海报想做什么。没错,这是一个很好的观点。同样,我对要完成的任务、输入等了解不够。由于@Simon comment.@drgomesp为什么不删除-1?对我来说似乎是一个合理的解决方案。从你以前遇到过的情况来看,这可能看起来很可笑,但如果我问一个问题,我想知道我能得到的任何想法,从我掌握的信息来看,我的想法似乎是可能的。我部分同意这个解决方案。主要问题是,如果将非常量值作为参数传递,则无法将其解为运行时值。这取决于问题海报想做什么。没错,这是一个很好的观点。再一次,我对要完成的任务、输入等了解不够。由于@Simon comment,删除了-1。
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");
}