php - php告诉函数和字符串
问题描述
他们是一种创建存储字符串和生成字符串的函数的数组的方法吗?
<?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);
}
推荐阅读
- flutter - DropdownButtonFormField 导致 RenderFlex 溢出
- flutter - 如何在颤振中集成 facebook 登录?
- powershell - 即使加载程序集,SMO Powershell 也会损坏
- r - 如何在 R 中读取 SharePoint 列表(本地)
- python - 用户输入以使用 python 在字典中显示某些值
- haskell - Haskell async:在 withAsync 中使用不同类型的 Monad
- fastapi - 在 GET 请求中使用 pydantic 验证器
- c# - 无法从 Windows 服务中运行 SWGVC.exe
- python - 如何使用“另存为”提示保存来自 interactive() 显示的 .svg 输出?
- python - 尝试在 Mac m1 上安装 opencv-python 时 ceres 出错