PHP - 外包切换案例在不同的文件中

时间:2017-06-07 13:37:20

标签: php switch-statement

我想要一个switch-case指令但是将所有case-statement外包到diffenrent文件中。 像这样:

<?php
switch ($a) {
    foreach (glob("/path/*.php") as $filename) {
            include $filename;
        }
}

并且在/ path /中有像a.php和b.php这样的文件,其内容类似于

<?php
case 1:
    echo "hello";
    break;

我该怎么做?

编辑: 如果感兴趣,我正在使用PHP7.1。

2 个答案:

答案 0 :(得分:0)

您的第一个代码段会立即失败,因为它不是有效的语法。 switch / case语句有一个真/假表达系统。您可以使用in_array检索结果。 (假设$a是您要查找的文件名)

示例:

$files = ['/path/to/file.txt','/path/to/file2.txt'];

$a = '/path/to/file.txt';           
switch($a) {

    case in_array($a,$files) : 
      echo 'test';
    break;

    default :

}

在您的示例中,您可以尝试:

$location = glob("/path/");

switch($a) {

    case in_array($a,$location) : 
      include $a;
    break;

    default :

}

这只是您可以做的示例代码。还有很多其他方法可以实现这一点,但是您没有给出所有这些事实,例如$a值。

但是,您可能希望在$a的不同值上运行一整套文件,另一个示例:

switch($a) {
    case 'value_of_something_one' : 
      foreach (glob("/path/to/one") as $filename) {
        include $filename;
      } 
    break;

    case 'value_of_something_two' : 
      foreach (glob("/path/to/two") as $filename) {
        include $filename;
      } 
    break;

    default : 
}

希望这有助于此。

PHP文档:(开关/案例) http://php.net/manual/en/control-structures.switch.php

答案 1 :(得分:0)

我找到的唯一解决方案是将switch-case更改为一些if语句:

$a = $_GET['something'];
foreach (glob("/path/*.php") as $filename) {
    include $filename;
}

然后在a.php

if ($a == 1) {
    echo "hello1";
}
b.php中的

if ($a == 2) {
    echo "hello2";
}

依旧......