Форматирование оператора if для удобочитаемости

Каков наилучший способ отформатировать это для удобства чтения?

if (strpos($file, '.jpg',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.gif',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.png',1) && file_exists("$thumbsdir/$file") == false) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } 

Я бы извлек логику «это изображение» в свою собственную функцию, что делает if более читаемым, а также позволяет централизовать логику.

 function is_image($filename) { $image_extensions = array('png', 'gif', 'jpg'); foreach ($image_extensions as $extension) if (strrpos($filename, ".$extension") !== FALSE) return true; return false; } if (is_image($file) && !file_exists("$thumbsdir/$file")) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } 
 if ((strpos($file, '.jpg',1) || strpos($file, '.gif',1) || strpos($file, '.png',1)) && file_exists("$thumbsdir/$file") == false) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } 
 function check_thumbnail($file) { return (strpos($file, '.jpg',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.gif',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.png',1) && file_exists("$thumbsdir/$file") == false); } if (check_thumbnail ($file)) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } 

После извлечения логики в отдельную функцию вы можете уменьшить дублирование:

 function check_thumbnail($file) { return (strpos($file, '.jpg',1) || strpos($file, '.gif',1) || strpos($file, '.png',1)) && (file_exists("$thumbsdir/$file") == false); } 

Я бы разделил ifs, поскольку там есть какой-то повторяющийся код. Также я стараюсь как можно скорее выйти из программы:

 if (!strpos($file, '.jpg',1) && !strpos($file, '.gif',1) && !strpos($file, '.png',1)) { return; } if(file_exists("$thumbsdir/$file")) { return; } createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); 

Проверка file_exists видимому, является постоянной для каждого из типов файлов, поэтому не сравнивайте их, если не file_exists проверка file_exists .

 if (file_exists("$thumbsdir/$file") == false) { if(strpos($file, '.jpg',1) || strpos($file, '.gif',1) || strpos($file, '.png',1) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } } 

Я бы разбил это так, отбросив проблему избыточности:

 if (strpos($file, '.jpg',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.gif',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.png',1) && file_exists("$thumbsdir/$file") == false) { createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize); fwrite($log,date("Ymd")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n"); } 

Ответ @Fire Lancer обращается к избыточности.

Я считаю следующее более читаемым, используя getimagesize (). Я пишу это с головы, так что может потребоваться некоторая отладка.

Вертикальный код более читабельен, чем горизонтальный, imho.

 // Extract image info if possible // Note: Error suppression is for missing file or non-image if (@$imageInfo = getimagesize("{$thumbsdir}/{$file}")) { // Accept the following image types $acceptTypes = array( IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG, ); // Proceed if image format is acceptable if (in_array($imageInfo[2], $acceptTypes)) { //createThumb(...); //fwrite(...); } } 

Мир + счастливый взлом.

Мог бы также бросить мои два цента.

 if(!file_exists($thumbsdir . '/' . $file) && preg_match('/\.(?:jpe?g|png|gif)$/', $file)) { createThumb($gallerydir . '/' . $file, $thumbsdir . '/' . $file, $thumbsize); fwrite($log, date('Ymd @ H:i:s') . ' CREATED: ' . $thumbsdir . '/' . $file . "\n"); }