我有一个功能
function getImg($img,$str,$input){
// dd($img);
$img_path = public_path().'/images/photos/devices/'.$img.'.jpg';
if(file_exists($img_path)){
if(strpos($input,$str)){
return $img;
}else{
return 'no-img';
}
}else{
return 'no-img';
}
}
然后,我称之为
getImg('phone','phone',$input);
为什么我一直收到此错误?
无法重新声明App \ getImg()
public static function img($input){
$img_path = public_path().'/images/photos/devices/';
$images = scandir($img_path, 1);
$devices = [];
foreach($images as $i=>$image){
if($image != '.' && $image != '..' && $image != '.DS_Store'){
$name = str_replace('.jpg', '', $image);
$devices[$i]['name'] = $name;
}
}
// dd($devices);
// dd($input);
foreach ($devices as $i=>$device) {
$matches = array_filter($devices, function($device) use ($input) {
return strpos($input, $device['name']) !== FALSE;
});
if(count($matches) > 0){
foreach ($matches as $match) {
$input = $match['name'];
$img_path = public_path().'/images/photos/devices/'.$input.'.jpg';
if(file_exists($img_path)){
return $input;
}else{
return 'no-img';
}
}
}else{
// dd($input);
function getImg($img,$str,$input){
// dd($img);
$img_path = public_path().'/images/photos/devices/'.$img.'.jpg';
if(file_exists($img_path)){
if(strpos($input,$str)){
return $img;
}else{
return 'no-img';
}
}else{
return 'no-img';
}
}
getImg('phone','phone',$input);
getImg('ipad','ipad',$input);
getImg('iphone','iphone',$input);
// getImg('imac','imac');
}
}
}
答案 0 :(得分:1)
你的函数应该在foreach循环之外声明,如此
function getImg($img,$str,$input){
// dd($img);
$img_path = public_path().'/images/photos/devices/'.$img.'.jpg';
if(file_exists($img_path)){
if(strpos($input,$str)){
return $img;
}else{
return 'no-img';
}
}else{
return 'no-img';
}
}
foreach ($devices as $i=>$device) {
..........
}
答案 1 :(得分:1)
在PHP中,函数始终在全局范围内,这与JavaScript不同,后者函数中的函数很常见。
因此,当您第二次调用您的函数img
时,它会尝试重新声明函数getImg
。
您应该在第一个函数之外定义函数,或将其包装在:
if ( ! function_exists('getImg')) {
...declare function
}
来自doc:
PHP中的所有函数和类都具有全局范围 - 它们可以是 在函数外部调用,即使它们是在内部和副内部定义的 反之亦然。