Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在PHP中的方法中获取语句?_Php - Fatal编程技术网

是否可以在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");
    }