首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php区分函数和字符串

php区分函数和字符串
EN

Stack Overflow用户
提问于 2018-06-07 03:50:39
回答 1查看 54关注 0票数 0

他们有没有办法创建一个同时存储字符串和生成字符串的函数的数组?

代码语言:javascript
复制
<?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";
}

将输出:

代码语言:javascript
复制
calling foo()
calling bar()

有没有什么方法可以实现数组,这样我就可以得到输出了:

代码语言:javascript
复制
calling foo()
bar

就像这样

代码语言:javascript
复制
$data[] = &foo;
$data[] = "bar";

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:29:07

我不知道你为什么需要这样做,但问题是你这样做的方式总是字符串,如果它们是可调用的,就没有办法区分。如何使用键或类似的东西,因为数组是按创建顺序排序的:

代码语言:javascript
复制
$data["foo"] = "foo";
$data[] = "bar";

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

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

代码语言:javascript
复制
$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";
    }
}

如果你存储代码,你可以求值:

代码语言:javascript
复制
$data[] = "echo foo();";
$data[] = "echo 'bar';";

foreach ($data as $element) {
    eval($element);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档