【问题标题】:PHP inclusion behaving oddly with multiple includesPHP 包含在多个包含中表现异常
【发布时间】:2010-12-08 05:08:44
【问题描述】:

我有以下代码:

if (include_once(dirname(__FILE__).'/file.php')
    || include_once(dirname(__FILE__).'/local/file.php')
    )
{

这会导致错误,因为 PHP 试图包含 "1"(大概是 dirname(__FILE__).'/file.php' || dirname(__FILE__).'/local/file.php'

注释掉第二行使这项工作按预期工作,除了它不会使用第二个文件。我真的需要在这里使用elseif 和代码重复,还是有办法让它工作?

$ php --version
PHP 5.2.6-3ubuntu4.2 和 Suhosin-Patch 0.9.6.2 (cli)(构建时间:2009 年 8 月 21 日 19:14:44)
版权所有 (c) 1997-2008 PHP Group
Zend Engine v2.2.0,版权所有 (c) 1998-2008 Zend Technologies

【问题讨论】:

    标签: php include


    【解决方案1】:

    尝试使用括号来降低运算符的优先级。

    if ( (include_once('xml.php')) || (include_once('xml.php')) ) {
        echo 'bah';
    }
    

    【讨论】:

      【解决方案2】:

      include 语句分组:

      if ( (include_once dirname(__FILE__).'/file.php')
            ||
           (include_once dirname(__FILE__).'/local/file.php')
         )
      

      请参阅手册页中的example #4

      <?php
      // won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')
      if (include('vars.php') == 'OK') {
          echo 'OK';
      }
      
      // works
      if ((include 'vars.php') == 'OK') {
          echo 'OK';
      }
      ?>
      

      【讨论】:

      • 这……至少可以说是违反直觉的。对 PHP 的“语言结构”的一千个诅咒。
      • 确实如此,但这是 PHP 的主要特征之一 :)。无论如何,我只是将语句的返回值分配给一些临时变量,并在 if 测试中使用这些变量。
      • 好吧,我要问:PHP的主要特点之一是什么?违反直觉,还是使用语言结构而不是实际函数?
      • 另外,我选择这样做的主要原因是我只想运行两个页面中的第一个(如果两个页面都存在的话)
      • 这个特点确实是违反直觉的,或者说是不一致的。
      猜你喜欢
      • 2015-02-15
      • 2012-05-13
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2011-11-13
      • 2018-08-07
      相关资源
      最近更新 更多