如何在不显示“ echo”的情况下比较两个包含“ echo”语句的php函数?

时间:2019-04-06 15:13:44

标签: javascript php

我的PHP:

<?php

function myFunc($echo) {
    //this js will print display the value of "myvar"
    $myvar = "<script type='text/javascript'>
                  var myvar= true;
                  document.write(myvar);
              </script>";
    //$myvar = "aDuck";
    if ($echo) {
        echo $myvar;
    }
}
function foo($echo) {
    if ($echo) {
        //this echoes "true", which is the value of js "myvar"
        echo "true";
    }
}
if (myFunc(true) == foo(true)) {
    echo "<br> WOW! it works!";
}
?>

我希望PHP在不刷新页面的情况下测试同一文件中javascript变量的值。我知道有多种方法可以通过多个文件(ajax,json ...)将js vars传递给php,但是我很好奇,想知道 this 是否可以工作。可以,但是我不满意,因为PHP实际上执行了这些功能。

这是输出:

truetrue

WOW! It works!

所测试的实际情况似乎是“此函数回显true”。

现在问问题:

  1. 如何防止它回显true
  2. 有没有一种方法可以使PHP测试myFuncfoo,而无需
    实际执行这些功能?
  3. 当javascript随页面一起加载时,有没有一种方法可以 用户修改myvar才能被PHP脚本读取?

3 个答案:

答案 0 :(得分:0)

您应该将“ echo”逻辑放在这样的函数之外。

function myFunc() {
    //this js will print display the value of "myvar"
    $myvar = "<script type='text/javascript'>
                  var myvar= true;
                  document.write(myvar);
              </script>";
    return $myvar;
}

// Here you use echo or not

if($condition){
 echo myFunc();
}

答案 1 :(得分:0)

PHP在服务器上运行,以生成供Web浏览器(“客户端”)运行的网页。客户端获取此输出并对其进行处理。对于网络浏览器,它将显示HTML并执行JavaScript。

在您的代码中,<div dangerouslySetInnerHTML={{__html: this.state.blog_post.body}} /> 包含一个以 select job, item, lst_trx_date from (select job, item, lst_trx_date, row_number() over(partition by stat,job,item order by lst_trx_date desc) rn from <table>)t where rn = 1 开头的字符串,它不包含$myvar。 PHP无法运行JavaScript代码,这就是浏览器的工作。

此外,当您执行<script时,将添加到发送到浏览器的输出中。因此,您的代码正在执行的操作是,向浏览器发送一些要运行的JavaScript代码,向浏览器发送true一词(将其显示在屏幕上,就像是HTML页面一样),然后比较的返回值2个功能。

这2个函数不返回任何内容,或者它们返回echo,您正在对其进行比较。 true是正确的,因此您的NULL也被打印到屏幕上(发送到浏览器以显示为HTML)。

您无法做自己想做的事情。您无法将JavaScript程序的输出与PHP变量进行比较。您将需要考虑另一种解决方案。

答案 2 :(得分:0)

有人在这里提出了一个涉及缓冲区操作的解决方案的不同问题:How do I capture PHP output into a variable?

我只是想说,如果它们是自定义函数,从长远来看,一些小的重构可能会为您提供更好的服务。代替:

function foo() {
    echo 'blah';
}

将其更改为此:

function foo() {
    echo bar();
}

function bar() {
    return 'blah';
}

这样,您对foo()的现有调用将保持不变,但是,如果您只想要该值,则可以调用bar()

具体针对您的问题:

<?php
function myFunc( ...$params ) {
    $x = myFunc2( ...$params );
    if( $x !== false ) echo $x;
}
function foo( ...$params ) {
    $x = foo2( ...$params );
    if( $x !== false ) echo $x;
}

function myFunc2($echo) {
    //this js will print display the value of "myvar"
    $myvar = "<script type='text/javascript'>
                  var myvar= true;
                  document.write(myvar);
              </script>";
    //$myvar = "aDuck";
    if ($echo) {
        return $myvar;
    } else {
        return false;
    }
}
function foo2($echo) {
    if ($echo) {
        //this echoes "true", which is the value of js "myvar"
        return "true";
    } else {
        return false;
    }
}
if (myFunc2(true) == foo2(true)) {
    echo "<br> WOW! it works!";
}
?>

但是...如果将True传递给专门用于指定是否要回显但又不想回显的参数,则表明代码中存在一个更为总体的结构性问题。

>