代码之家  ›  专栏  ›  技术社区  ›  Angel.King.47

是否可以将两个require-once语句与or运算符分离,以使用后者作为回退?

php
  •  1
  • Angel.King.47  · 技术社区  · 15 年前

    有双人表演的方法吗 require_once 声明如果第一个失败,第二个作为回退的位置?

    例如:我可以这样做

    mysql_query() or die("Boo");
    

    我能做什么:

    require_once('filename') or require_once('../filename');
    

    如果其中一个失败了,它会恢复到另一个?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Pekka 웃    15 年前

    你不能这样做,因为在PHP中有一个奇怪的小怪癖。 require_once() 是语言结构,而不是函数。它会解释 全线 作为论据:

    (('filename') or require_once('../filename'))
    

    (为清楚起见添加了大括号)此操作的结果是 1 .

    使用 is_readable() 相反。

    if (is_readable($filename)) 
      require_once($filename); 
        else require_once("../$filename");
    

    或者一个可以工作的较短版本:

    require_once(is_readable($filename) ? $filename : "../$filename");
    
        2
  •  2
  •   dnagirl    15 年前

    @佩卡是对的。不过,我想补充一些其他的内容,这样可以完全解决这个问题。如果文件位于多个不同的位置,则可以编辑include路径,以便需要()和include()在多个位置进行查找。见 set_include_path()

    手册中的示例为现有包含路径添加了新路径:

    $path = '/usr/lib/pear';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    
    推荐文章