我使用两个函数。函数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。是我犯了错误还是正常现象?
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
您不能像在函数中那样定义全局变量,它们必须首先在全局范围内定义。正确的方法是从第二个函数返回并在第一个函数中分配返回值:
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']但不要这样做。
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消