Php switch语句应该这样使用吗?

Php switch语句应该这样使用吗?,php,switch-statement,Php,Switch Statement,使用开关作为支持多种文件格式的一种方式是可以接受的,还是不好的做法 与此类似(未经测试): asXML($filename..xml'); 打破 案例“json”: 文件内容($filename..json',json编码($openfile,json打印)); 打破 } ?> 这取决于您的编码风格。如果您想使用面向对象的方法,那么这将违背您的想法。在这种情况下,您可以使用以下内容: $file=$repository->open($filename,$data\u格式); //做事 $file

使用
开关
作为支持多种文件格式的一种方式是可以接受的,还是不好的做法

与此类似(未经测试):

asXML($filename..xml');
打破
案例“json”:
文件内容($filename..json',json编码($openfile,json打印));
打破
}
?>

这取决于您的编码风格。如果您想使用面向对象的方法,那么这将违背您的想法。在这种情况下,您可以使用以下内容:

$file=$repository->open($filename,$data\u格式);
//做事
$file->save();
当然,
$repository->open()


但是,如果您不是面向对象的,而是良好的旧过程风格,我看不出您使用switch语句有任何错误。

这里的
open
方法不是必须有某种代码,比如打开不同数据文件的开关,或者每个数据格式有多种方法吗?像这样的东西可以接受吗
$file=$repository->{$data\u format}\u open($filename)?由于$data_格式在您的案例中是一个字符串,因此您需要在某个点执行切换(或if/else或map lookup)。面向对象方法的优点是,您只需要一个开关(您的方法需要它两次),并且您可以将决定如何加载/保存的问题与您对文件所做的任何可以提高可读性和可测试性的操作分离开来。@Coffee'dUpHacker:your proposal
$repository->{$data\u format}\u open($filename)
当然会起作用,但在我看来,它损害了可读性,因为调用时不完全清楚
$data\u format
可能包含哪些值。
<?php

    // Load file
    switch ($data_format) {
        case 'xml':
            $openfile = simplexml_load_file($filename . '.xml');
            break;

        case 'json':
            $openfile = json_decode(file_get_contents($filename . '.json'));
            break;
    }

    // Do stuff

    // Save file
    switch ($data_format) {
        case 'xml':
            $openfile->asXML($filename . '.xml');
            break;

        case 'json':
            file_put_contents($filename . '.json', json_encode($openfile, JSON_PRETTY_PRINT));
            break;
    }

?>