簡體   English   中英

PHP告訴函數和字符串之間

[英]php tell between function and string

是他們創建存儲字符串和生成字符串的函數的數組的方法嗎?

<?php

function foo()
{
    return "calling foo()";
}


function bar()
{
    return "callin bar()";
}


$data = array();
$data[] = "foo";
$data[] = "bar";

foreach ($data as $element) {
    if (is_callable($element)) echo $element()."\n";
    else echo $element."\n";
}

將輸出:

calling foo()
calling bar()

有什么方法可以實現數組,以便獲得輸出:

calling foo()
bar

就像是

$data[] = &foo;
$data[] = "bar";

foreach ($data as $element) {
    if (is_callable($element) && !is_string($element)) return $element();
    else return $element;
}

我不確定為什么會需要它,但是問題是,您執行此操作的方式始終是字符串,如果可調用,則無法區分。 由於數組按創建順序排序,因此如何使用鍵或類似方法:

$data["foo"] = "foo";
$data[] = "bar";

foreach ($data as $key => $element) {
    if (is_callable($element) && is_string($key)) {
        echo $element()."\n";
    } else {
        echo $element."\n";
    }
}

另一種可能性(有很多):

$data[]['fnc'] = "foo";
$data[]['str'] = "bar";

foreach ($data as $element) {
    if (isset($element['fnc']) && is_callable($element['fnc'])) {
        $element = $element['fnc'];
        echo $element()."\n";
    } else {
        echo $element['str']."\n";
    }
}

如果您存儲代碼,則可以評估:

$data[] = "echo foo();";
$data[] = "echo 'bar';";

foreach ($data as $element) {
    eval($element);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM