$format = 'png';
SWITCH ($format):
case 'txt': // условие 1
break;
case 'jpg': case 'png': case 'gif': // условие 2
break;
default: // условие по умолчанию
break;
ENDSWITCH;
switch ... case
только так записывается.$format = 'png';
$ext = array(
'text' => array(
'txt' => TRUE,
),
'pics' => array(
'jpg' => TRUE,
'png' => TRUE,
'gif' => TRUE,
),
'music' => array(
'mp3' => TRUE,
'aiff' => TRUE,
'wav' => TRUE,
),
);
if( isset( $ext['text'][$format])) // сделать что-то для текста
else if( isset( $ext['pics'][$format])) // что-то для картинок
else if( isset( $ext['music'][$format])) // что-то для музыки
else // что-то по умолчанию
;
if...else
, говорят, лучше, чем у switch
. abstract class AbsctactFileProcessor
{
abstract public function supports($extension);
abstract public function process($file);
}
class ProcessingProvider
{
private $processors;
public function __construct()
{
$this->processors = array();
}
public function addProcessor(AbsctactFileProcessor $processor)
{
$this->processors[] = $processor;
return $this;
}
public function process($file)
{
$file = new \SplFileInfo($file);
$extension = $file->getExtension();
foreach ($this->processors as $processor) {
if ($processor->supports($extension)) {
return $processor->process($file);
}
}
throw new \LogicException();
}
}
class SimpleTextProcessor extends AbsctactFileProcessor
{
public function process($file)
{
// return ...
}
public function supports($extension)
{
return in_array($extension, array('txt'));
}
}
class ImageProcessor extends AbsctactFileProcessor
{
public function process($file)
{
// return ...
}
public function supports($extension)
{
return in_array($extension, array('png', 'gif', 'bmp', 'jpg'));
}
}
$provider = new ProcessingProvider();
$provider->addProcessor(new \SimpleTextProcessor());
$provider->addProcessor(new \ImageProcessor());
$provider->process('mybestfile.exe');
switch(true) {
case ($format == 'text'):
break;
case (in_array($format, array('jpg', 'png', 'gif'))):
break;
default:
break;
}
case 'text':
break;
case 'jpg':
case 'png':
case 'gif':
break;
default:
break;