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);
}
他们是一种创建既存储字符串又存储生成字符串的函数的数组的方法吗?
<?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);
}