发布
社区首页 >问答首页 >如何在两个qoutes之间打印函数值?

如何在两个qoutes之间打印函数值?
EN

Stack Overflow用户
提问于 2020-01-28 16:39:11
回答 2查看 71关注 0票数 0

我正在学习PHP的一些基础知识,所以我对两个语句感到困惑:

代码语言:javascript
代码运行次数:0
复制
print("${phpinfo()}"); 

函数的打印结果。所以我试着让它依赖于用户输入,所以我做了这样的陈述:

代码语言:javascript
代码运行次数:0
复制
print("$_GET[z]");

但是,当我传递这个值时,它的${phpinfo()} ${phpinfo()}与第一条语句不同。那么,我如何才能纠正这个错误,并打印函数的结果,而不是打印它的名称。

EN

回答 2

Stack Overflow用户

发布于 2020-01-28 16:49:02

如果您需要打印函数的结果,例如:

代码语言:javascript
代码运行次数:0
复制
function result(){
    return "res";
}

使用print_r(result()); -> print_r()。您将在输出中获得res

你的函数必须返回一些东西,它可以是一个对象,一个数组,一个字符串或数值,也可以是布尔值。在本例中,对于每种类型的数据,您将看到print_r()格式的输出,对于字符串/数值,您将看到echo()格式的输出。

在您的案例中使用

代码语言:javascript
代码运行次数:0
复制
print_r($_GET["z"]);

使用引号意味着打印一些字符串。"z" -表示变量$_GET中数组的索引。另外,请阅读difference between using of single and double quotes

此外,您可以将函数的输出值放入变量中,然后打印它,但此输出的数据类型必须是字符串/数字。

代码语言:javascript
代码运行次数:0
复制
function result(){
   // return 333;
    return "eeee";
}
$s = result();

print_r("$s");
// Output is: eeee (or 333)

Demo

对于数组变量,您可以按如下方式使用print_r()

代码语言:javascript
代码运行次数:0
复制
$_GET["a"] = "word";

print_r("$_GET[a]");
// Output is: word

但是$_GET["a"]也应该只有字符串/数字数据类型。

在这里你可以读到很多关于string parsing process的案例。

在使用print()函数的情况下,您可以将其用作:

代码语言:javascript
代码运行次数:0
复制
$_GET['x'] = 'sss';

print "this is {$_GET['x']} !";

同样,value应该是string/numeric数据类型。

如果你想从函数中得到结果,你可以使用下面的代码:

代码语言:javascript
代码运行次数:0
复制
$_GET['z'] = "phpinfo()";
foreach ($_GET as $item){
    if (gettype($item) === 'string'){
       if (strpos($item,'()')) {
            $s = str_replace('()','',$item);   
            print $s();                       // execution 
        } 
    }
}  

在这里,您可以将所需函数的名称作为字符串发送,如"phpinfo()"

您不能在$_GET because of that中使用${phpinfo()}。它读取内容并认为它是一个变量,但事实并非如此。

票数 0
EN

Stack Overflow用户

发布于 2020-01-28 18:41:36

与.php?z=phpinfo链接

然后

代码语言:javascript
代码运行次数:0
复制
$z = $_GET['z'];
print_r($z());

但请记住,这很容易受到攻击--只是提醒一下;)

编辑:您也可以使用call_user_func

代码语言:javascript
代码运行次数:0
复制
print_r(call_user_func($_GET['z']));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59944871

复制
相关文章

相似问题

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