无法重新声明App \ funtion_name()

时间:2016-03-03 17:48:39

标签: php laravel laravel-5 laravel-5.1

我有一个功能

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');

        }

    }

}

2 个答案:

答案 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中的所有函数和类都具有全局范围 - 它们可以是   在函数外部调用,即使它们是在内部和副内部定义的   反之亦然。