Каков наилучший способ отформатировать это для удобства чтения?
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"); }