Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较包含“echo”语句的两个php函数,而不显示“echo”?_Javascript_Php - Fatal编程技术网

Javascript 如何比较包含“echo”语句的两个php函数,而不显示“echo”?

Javascript 如何比较包含“echo”语句的两个php函数,而不显示“echo”?,javascript,php,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&

我的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测试myFunc和foo而不用 实际执行这些功能? 当javascript与页面一起加载时,是否有方法 在PHP脚本读取myvar之前,用户是否要修改它?
您应该将echo逻辑拉到这样的函数之外

函数myFunc{ //此js将打印并显示myvar的值 $myvar= var-myvar=true; document.writemyvar; ; 返回$myvar; } //在这里,您是否使用echo if$条件{ echo-myFunc; }
PHP在服务器上运行,为客户端运行的web浏览器生成网页。客户机获取此输出并对其进行处理。对于web浏览器,它显示HTML并执行JavaScript


在您的代码中,$myvar包含一个以开头的字符串,有人发布了一个不同的问题,其中包含一个涉及缓冲区操作的解决方案,如下所示:

我只是想说,如果它们是自定义函数,从长远来看,稍微进行一点重构可能会更好。而不是:

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传递给一个参数,该参数专门用于指定是否要回显,但不想回显,则表明代码中存在更为严重的结构问题。

使用return而不是echo。您不比较函数。您正在比较函数返回的内容。这两种情况下都是空的。您无法阻止echoig true中的函数,因为它们就是这样做的。没有办法。“不,你不能。”弗兰兹格莱奇曼:你完全正确。这完全是胡说八道。谢谢你的回答!那么,我有没有办法测试的输出是否与相同?可能有用。哦,是的,它在防御上是有用的!谢谢你@NigelRen!这里的问题是它中断了对myFunc的所有现有调用
<?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!";
}
?>