2013-12-14 255 views
0

我在谷歌和在此搜索stackoverflow,但我找不到任何结果。 我想要的是知道你是否可以从一个字符串执行一个PHP函数。 为什么? 我有一个函数可以在数组之后创建一个表。 事情是我想要的,例如格式化一个unix时间戳到一个日期,但动态。 例从PHP字符串执行PHP函数

'Register date' => array(
     "<?php date('h:m:i',{RegDate}); ?>" 
), 

这可能吗? (我已经有一个函数将{RegDate}转换成相应的行,所以我需要的只是以某种方式执行函数日期,如果可能的话)。

我试过eval,甚至只是一个简单的回声,时间HTMLS评论我的PHP代码和它们成为

<!--?php date('h:m:i',1362159376); ?--> 
+1

评估字符串作为代码通常是设计不佳的标志。仔细查看你的代码,看看是否有更好的方法去做你想做的事情。如果您确实需要使用eval,则只需将它传递给PHP代码即可,而不包含环绕它的。 – Thayne

+0

我试过没有php的标签,但它只是回声纯色的字符串.. –

+0

什么是“每次htmls评论我的PHP标签”是什么意思?您是否验证过转换标签的内容,或者您​​是否只查看浏览器常用的* view source *窗口输出? - 您可能希望详细说明应用程序流(“数组后的表”)以及为什么您认为这是必要的。显示您的'eval'解决方法尝试。解释为什么你不能扩展你的占位符语法来支持基本功能。 – mario

回答

2

您可以使用匿名函数吧:

'Register date' => function($regdate) { 
    return date('h:m:i', $regdate); 
}, 

然后调用它像这样:

call_user_func($x['Register date'], $row['date']); 
+0

啊,用匿名函数找到了一个方法,谢谢。 –

0

为什么不直接使用

'Register date' => array(
    date('h:m:i', RegDate)) 

从我所看到的,我们没有理由去尝试,并在此使用的变量解析,因为日期()返回一个字符串已经。如果你真的需要,你可以使用以下命令:

'Register date' => array(
    "{date('h:m:i', RegDate)}") 

整个表达式需要是{}'来执行字符串,这就是为什么在你的例子中,你都拿到了时间戳,但不是第内部其余的表达。

+0

那么,如果我使用的第一件事,你建议它会从阵列执行......并且我需要用时间戳替换regdate变量..所以这是行不通的。第二个例子,我有一个Preg匹配,它将{}中的内容作为索引,并将其作为变量$ row的索引,这是来自数据库的行..感谢回应寿。 –

+0

老实说,你似乎试图对你正在解决的问题采取一种可怜的办法,它基本上在我看来,你正试图绕过代码作为参数,因为你想要将它存储在一个字符串中。使用匿名函数可能会更好。 –

0

我想知道如果你可以执行一个字符串的PHP函数。

当然可以,但似乎这不是你的问题。 “从字符串”执行功能:

<?php 
    call_user_func('date', 'h:m:i', RegDate); 

所以,如果“动态”意味着你要告诉函数的名称为好,那么这是这样的。

您也可以传递参数数组:

<?php 
    call_user_func_array('date', array('h:m:i', RegDate));