php)即使$param1不是空的,if(empty($param1)){}中的代码仍然运行

php)即使$param1不是空的,if(empty($param1)){}中的代码仍然运行,php,function,if-statement,Php,Function,If Statement,我已经研究这个问题好几个小时了,但我不明白为什么if语句中的empty()不能像我预期的那样工作 fetch.php header('Content-Type: application/json'); function fetchApi($param1){ $apiKey="SOME TEXT WHICH I WILL NOT POST HERE"; $curl = curl_init(); if(empty($param1)){

我已经研究这个问题好几个小时了,但我不明白为什么if语句中的empty()不能像我预期的那样工作

fetch.php

    header('Content-Type: application/json');

function fetchApi($param1){
    $apiKey="SOME TEXT WHICH I WILL NOT POST HERE";
    $curl = curl_init();
    if(empty($param1)){       
        $body = json_decode(file_get_contents('php://input'), true);
        $bodyObject = (object) $body;
        if($bodyObject->target=="main"){
            $bodyObject->link = $bodyObject->link . "random?number=4".$apiKey;
            curl_setopt($curl, CURLOPT_URL, $bodyObject->link);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl); 
            echo $output;
        }
    }else{
        echo $param1;
    }
    curl_close($curl);
}
fetchApi('');
这是我的fetch.php代码,我需要在两种不同的情况下运行fetchApi。 第一种情况是加载index.html时。Javascript将自动fetch到fetch.php,并以空字符串作为参数运行函数fetchApi。经过数百次测试,效果良好

但问题是,当用户搜索某些内容时,我也需要在search.php中运行此函数

index.html中的表单

 <form action="search.php" method="GET">
     <label for="check">ingradients</label><input id="check"type="checkbox"/>
     <input type="text" name="search" placeholder="SEARCH"/>
 </form>

忘恩负义者
search.php

<!DOCTYPE html>
 <html lang="en">
 <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
 </head>
 <body>
  <?php 
    $searchId = $_GET["search"];
    include ('fetch.php');
    fetchApi($searchId);
   ?>
</body>
</html>

文件
正如您所看到的,在search.php中,我包括fetch.php并使用参数$_GET[“search”]调用函数fetchApi,但我在搜索某个内容时出现此错误

注意:第16行的C:\xampp\htdocs\spoonacular\fetch.php中未定义的属性:stdClass::$target

我不明白为什么php会显示这样的错误。我传递了一个参数,它不是空的,为什么php仍然在if(empty($param1)){}中运行算法?我也尝试过if($param1=='''{}),但它也不起作用


如果我想完全忽略if(empty($param1))中的所有内容,如果函数参数不是空字符串或NULL,该怎么办

亲自回答我的问题。 它与if(空(..)无关 我犯那个错误的原因是

fetchApi('');
在我包含fetch.php时总是调用 感谢用户3783243的评论

我就这样解决了这个问题

if(empty($_GET)){    
    fetchApi('');
}

fetchApi(“”)仅在用户未发出GET请求时运行

您有
fetchApi(“”)在您的文件中,所以它总是额外调用自身。@user3783243如果我不想在另一个php文件的first if语句中运行算法,我该怎么办?当我包含文件时,如果fetchApi(“”)也运行,我不知道该怎么办。@user3783243谢谢您的宝贵意见。。。。你的第一句话帮助我解决了问题。非常感谢。我将fetchApi(“”)放在if(empty($\u GET))中,它工作得很好!!