猿问

PHP:无法在父函数中使用函数变量

我使用两个函数。函数1(“setImageCopyrightsPost”)将一些信息写入数组(“img_copyrights”),然后调用函数2(“getPostImageThumbnailByID”),然后将函数2中设置的变量(“img_thumbnail”)写入数组以及。但最后一步不起作用。


function setImageCopyrightsPost($db_link_backend, $img)

{


    global $img_copyrights;

    global $img_thumbnail;


    $img_copyrights["post-". $img['id']]['title'] = $img['title'];

    $img_copyrights["post-". $img['id']]['copyright'] = $img['copyright'];


    getPostImageThumbnailByID($img['id']);


    $img_copyrights["post-". $img['id']]['url'] = IMG_URL_PATH . $img_thumbnail;


}


function getPostImageThumbnailByID($img_id)

{


    global $img_thumbnail;

    unset($img_thumbnail);


    $sql_get_img_meta_by_id = "SELECT ...'";

    // some SQL-stuff


    if ($num_rows_get_img_meta_by_id == 1 && mysqli_errno($db_link_backend) == 0) {


        $row_get_img_meta_by_id = mysqli_fetch_array($result_get_img_meta_by_id);


        // get data from image meta

        unset($preg_matches);

        preg_match("/(\"thumbnail\")(.+?)(\"file\")(.+?)(\")(.+?)(\")(.+?)(\"width\";i:)(.+?)(;)(.+?)(\"height\";i:)(.+?)(;)/m", $row_get_img_meta_by_id['meta_value'], $preg_matches);


        // set name

        $img_thumbnail = $preg_matches[6];


        echo $img_thumbnail;


        return true;


    }

    


}



我遗漏了 sql-stuff,因为我知道它正在工作,因为它echo $img_thumbnail正在工作 - 变量正确打印在页面上。但是当我使用时var_dump($img_copyrights),只设置了“标题”和“版权”,“url”为“NULL”。


看来,函数 1 不能使用函数 2 中设置的变量 $img_thumbnail。


是我犯了错误还是正常现象?


紫衣仙女
浏览 99回答 1
1回答

拉风的咖菲猫

您不能像在函数中那样定义全局变量,它们必须首先在全局范围内定义。正确的方法是从第二个函数返回并在第一个函数中分配返回值:function setImageCopyrightsPost($db_link_backend, $img){    //remove    //global $img_thumbnail;    //code    $img_thumbnail = getPostImageThumbnailByID($img['id']);  // assign the return    $img_copyrights["post-". $img['id']]['url'] = IMG_URL_PATH . $img_thumbnail;}function getPostImageThumbnailByID($img_id){        //remove        //global $img_thumbnail;        //unset($img_thumbnail);        //code        $img_thumbnail = $preg_matches[6];        return $img_thumbnail;  // return the variable}一种黑客方法是将所有实例替换为$img_thumbnail,$GLOBALS['img_thumbnail']但不要这样做。
随时随地看视频慕课网APP
我要回答