将PHP语法存储在变量中

时间:2011-03-06 19:53:55

标签: php variables

是否可以将PHP语法存储在变量中供以后使用和重复,如下所示:

$ifStart = "if(";
$ifEnd = "){ echo 'Test'; }";

$ifStart 'A' == 'B' $ifEnd;

编辑:我想要完成的是:

我有3个表单字段,加载PHP脚本时,可以设置三个中的任何一个。没有可以设置,两个,一个......所以我需要一些方法来确定设置了多少以及根据它设置了什么。这就是原因。

编辑:是的,所以我有一个HTML Select和两个文本输入字段。我的脚本检查这些字段是否已设置(isset)并相应地执行一些代码,将信息放入数组等。但我现在要做的是检查变量是否已经逐个设置,这样我就可以输出正确的我存储在数组中的结果。

新编辑:这显然很难解释。但想象一下搜索引擎,您可以在其中决定要填写哪些字段,然后脚本会检查哪些字段已设置并在数组中循环显示所有结果,只收集带有与所请求搜索相对应的子元素的元素,这就是我想要实现的目标。

这是在POST中选择/设置了AGE和COUNTY的数组设计(因此没有[city]元素的原因:

Array

(     [1] =>排列         (             [id] => 1             [age] => 19             [county] => 4353         )

[2] => Array
    (
        [id] => 2
        [age] => 20
        [county] => 4020
    )

[3] => Array
    (
        [id] => 3
        [age] => 30
        [county] => 4020
    )


仍然试图找出如何根据-its-内容选择特定的数组元素。例如,我有一个这样的数组:

数组(1:[年龄] [县],2:[年龄] [县],3:[年龄],4:[县],5:[年龄] [县])

然后我想只选择包含年龄和县的ID,在本例中为ID 1,2和5。

编辑:它类似于SQL查询:WHERE年龄和县,只有这是一个数组

6 个答案:

答案 0 :(得分:2)

一个干净的方法(干净因为它避免了eval())来做相对动态的代码就是存储一个函数名,或者在php 5.3之后存储一个函数引用。

E.g。类似的东西:

$callback = "truth_check";

$condition_result = ($a == $b);

if(is_callable($callback)){
    $callback($condition_result);
}

请在此处查看正在运行的示例:http://ideone.com/1SBYS

在您的情况下,回调可能是运行的结果,例如“print_message_on_true_input”作为一些比较函数,输入可能是代码中任何地方的条件测试结果,例如: $ print =(false || $ a == $ b);

给出您的特定用例,因为90%的时间预期行为可以更少地实现根本不需要任何动态代码。

答案 1 :(得分:2)

有可能......

<强> BUT

如果你必须这样做,你的设计肯定有问题

[编辑后编辑] 你的编辑告诉我,我是对的。你想要做的事情,可以用更好的方式完成!

因此,如果我理解正确,您希望根据用户填写/回答的表单字段来更改输出。到目前为止,您将$ _POST数组中的一些值存储在另一个数组中。为了生成输出,最好循环遍历该数组并连接字符串,具体取决于已填充的内容。

foreach ($myArray as $formField => $value)
{
    //do something for each $formField, depending on the $value
}

如果仍然让你感到困惑,请在这里发表评论。


您编写它的方式不起作用,您需要使用eval()。在大多数情况下使用eval()是不好的做法。这不是主要问题,但主要问题是,这些代码难以阅读,难以调试以及维护且难以记录。总而言之,这是不好的做法,会导致糟糕的解决方案和更多的问题。

答案 2 :(得分:0)

有可能吗?是的,使用eval

你应该这样做吗?不,不,不,请不要。

答案 3 :(得分:0)

没有。您可以改用函数。

function my_compare($a, $b, $symbol = '==') {
  eval('$result = $a ' . $symbol . ' $b;');
  if ($result) echo 'Test';
}
// ...

my_compare('A', 'B');

答案 4 :(得分:0)

请记住上面的评论警告你这个想法!

但你可能会这样做:

$ifStart = "if(";
$ifEnd = "){ echo 'Test'; }";

eval( "  {$ifStart} 'A' == 'B' {$ifEnd} " );

答案 5 :(得分:0)

好的,所以你需要的东西与原始问题中涉及的动态代码关系不大,所以我将重新开始并提出一个完全不同的方法:

//INITIALIZE
//get your input variables, defaulting to null
$inputs = array('select'=>@$_REQUEST['select_name'], 'input1'=>@$_REQUEST['input_1_name'], 'input2'=>@$_REQUEST['input_2_name']);
// initialize your output variables
$out1 = $out2 = $out3 = null;

//MANIPULATIONS
//perform actions based on the presence of variables in the array
if($inputs['select'] == 'whatever'){
    $out1 = 'select was '.htmlentities($inputs['select']);
}
// .... perform more manipulations, setting output strings ...

// OUTPUT SECTION
echo $out1.$out2.$out3;