我想要一个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。
答案 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";
}
依旧......