不能对函数调用的结果使用 isset()(可以使用 "null != Func ()" 代替)

Cannot use isset () on the result of a function call (you can use "null != Func ()" instead)

( ! ) Fatal error: Cannot use isset() on the result of a function call (you can use "null !== func()" instead) in C:\Users\sanoj\Documents\NetBeansProjects\video-site\app\detect.php on line 45
Call Stack
#   Time    Memory  Function    Location
1   0.0000  234208  {main}( )   ..\index.php:0

之前我的代码是

if(!defined('WAP'))
    define('WAP', isset($_REQUEST['wap']) || isset($_REQUEST['wap2']) || isset($_REQUEST['imode'])|| isset($_REQUEST['html'])|| isset($_REQUEST['Android'])|| isset($_REQUEST['iphone'])|| isset($_REQUEST['IEMobile']));

    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset($_REQUEST['wap']) ? 'wap' : (isset($_REQUEST['wap2']) ? 'wap2' : (isset($_REQUEST['iphone']) ? 'iphone' : (isset($_REQUEST['imode']) ? 'imode' : (isset($_REQUEST['IEMobile']) ? 'IEMobile' :(isset($_REQUEST['html']) ? 'html' : (isset($_REQUEST['Android']) ? 'Android' : '')))))));  

我的 IDE 警告 Do Not Access SuperGlobal $_REQUEST Array Directly 所以我使用了下面的代码

if(!defined('WAP'))
{
    define('WAP', isset(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) || isset(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) || isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))|| isset(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));
}
    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) ? 'wap' : (isset(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) ? 'wap2' : (isset(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)) ? 'iphone' : (isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)) ? 'imode' : (isset(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)) ? 'IEMobile' :(isset(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)) ? 'html' : (isset(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)) ? 'Android' : '')))))));  

这里是detect.php

<?php
$userBrowser = $_SERVER['HTTP_ACCEPT']; 
if(stristr($userBrowser, 'application/vnd.wap.xhtml+xml')) 
{
$_REQUEST['wap2'] = 1;
}

elseif(stripos($_SERVER['HTTP_USER_AGENT'],"iPod"))
{
$_REQUEST['iphone'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"iPhone"))
{
$_REQUEST['iphone'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"Android"))
{
$_REQUEST['Android'] = 1;

}
elseif(stripos($_SERVER['HTTP_USER_AGENT'],"IEMobile"))
{
$_REQUEST['IEMobile'] = 1;

}
elseif(stristr($userBrowser, 'DoCoMo/' || 'portalmmm/'))
{
$_REQUEST['imode'] = 1;
}

elseif(stristr($userBrowser, 'text/vnd.wap.wml')) 
{
$_REQUEST['wap'] = 1;
}
elseif(stristr($userBrowser, 'text/html')) 
{
$_REQUEST['html'] = 1;
}


if(!defined('WAP'))
    define('WAP', isset($_REQUEST['wap']) || isset($_REQUEST['wap2']) || isset($_REQUEST['imode'])|| isset($_REQUEST['html'])|| isset($_REQUEST['Android'])|| isset($_REQUEST['iphone'])|| isset($_REQUEST['IEMobile']));

    if (WAP)
{
    define('WIRELESS_PROTOCOL', isset($_REQUEST['wap']) ? 'wap' : (isset($_REQUEST['wap2']) ? 'wap2' : (isset($_REQUEST['iphone']) ? 'iphone' : (isset($_REQUEST['imode']) ? 'imode' : (isset($_REQUEST['IEMobile']) ? 'IEMobile' :(isset($_REQUEST['html']) ? 'html' : (isset($_REQUEST['Android']) ? 'Android' : '')))))));  

if (WIRELESS_PROTOCOL == 'wap')
      {
$browser_t = "mobile";
      }
elseif (WIRELESS_PROTOCOL == 'wap2')
      {


$browser_t = "mobile";


      }
elseif (WIRELESS_PROTOCOL == 'imode')
      {

$browser_t = "mobile";

      }
      elseif (WIRELESS_PROTOCOL == 'iphone')
      {


$browser_t = "smartphone";

      }
      elseif (WIRELESS_PROTOCOL == 'Android')
      {


$browser_t = "smartphone";

      }
       elseif (WIRELESS_PROTOCOL == 'IEMobile')
      {

$browser_t = "smartphone";

      }
      elseif (WIRELESS_PROTOCOL == 'html')
      {

     $mobile_browser = '0';

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
    strtolower($_SERVER['HTTP_USER_AGENT']))){
    $mobile_browser++;
    }

if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or 
    ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){
    $mobile_browser++;
    }

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda','xda-');

if(in_array($mobile_ua,$mobile_agents)){
    $mobile_browser++;
    }
if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
    $mobile_browser++;
    }
        if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'iemobile')>0) {
$mobile_browser++;
}
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
    $mobile_browser=0;
    }


if($mobile_browser>0){
   // do something wap

$browser_t = "mobile";

}
// non-mobile
else
{

$_SESSION['Browser_d'] = "web";
$browser_t = "web";

}
   } else {
   // do something else html

$_SESSION['Browser_d'] = "web";
$browser_t = "web";
   }

      }


    else
    {
$mobile_browser = '0';

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',
    strtolower($_SERVER['HTTP_USER_AGENT']))){
    $mobile_browser++;
    }

if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or 
    ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){
    $mobile_browser++;
    }

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda','xda-');

if(in_array($mobile_ua,$mobile_agents)){
    $mobile_browser++;
    }
    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'iemobile')>0) {
$mobile_browser++;
}
if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
    $mobile_browser++;
    }
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
    $mobile_browser=0;
    }


if($mobile_browser>0){
   // do something wap

$browser_t = "mobile";

}
// non-mobile
else
{
$_SESSION['Browser_d'] = "web";
$browser_t = "web";
}

    }
     ?>

index.php

<?php 
include "app/config.php";
include "app/detect.php";

if ($page_name=='') {
    include $browser_t.'/index.html';
    }
elseif ($page_name=='index.html') {
    include $browser_t.'/index.html';
    }
elseif ($page_name=='singlepage.html') {
    include $browser_t.'/singlepage.html';
    }
elseif ($page_name=='categories.html') {
    include $browser_t.'/categories.html';
    }
elseif ($page_name=='contact.html') {
    include $browser_t.'/contact.html';
    }
else
    {
        include $browser_t.'/404.html';
    }

?>

config.php

<?php
$current_page_uri = $_SERVER['REQUEST_URI'];
$part_url = explode("/", $current_page_uri);
$page_name = end($part_url);
$email_id = "s.hidayath@agileits.com";
?>

加载索引文件时,它应该检测设备并将其重定向到正确的根目录,但在我的情况下它没有 我收到以下错误

( ! ) Notice: Undefined index: ALL_HTTP in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\app\detect.php on line 118
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0
2   0.0230  295896  include( 'C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\app\detect.php' )  ..\index.php:11

( ! ) Warning: include(web/404.html): failed to open stream: No such file or directory in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\index.php on line 30
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0

( ! ) Warning: include(): Failed opening 'web/404.html' for inclusion (include_path='.;C:\php\pear') in C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\index.php on line 30
Call Stack
#   Time    Memory  Function    Location
1   0.0090  233992  {main}( )   ..\index.php:0

isset()用作:

    if(!defined('WAP')){
      if(isset($_REQUEST['wap']) || isset($_REQUEST['wap2']) || ..){
      $wap = $_REQUEST['wap']);
      $wap2 = $_REQUEST['wap2']);
      //other variables
      define('WAP', $wap || $wap2 || ..);
    }

}

删除第二个示例中的 isset() 调用,它应该可以工作。

if(!defined('WAP'))
{
    define('WAP', filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING) || filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING) || filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)|| filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)|| filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)|| filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)|| filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING));
}
if (WAP)
{
    define('WIRELESS_PROTOCOL', filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING) ? 'wap' : (filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING) ? 'wap2' : (filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING) ? 'iphone' : (filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING) ? 'imode' : (filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING) ? 'IEMobile' :(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING) ? 'html' : (filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING) ? 'Android' : '')))))));
}

这是因为 filter_input() 函数将 return 一个已经计算为 true/false 的值,因此您也不需要 isset()。查看 PHP Manual for filter_input() 中的 return 值了解更多信息。

您可能还想查看 empty()is_null(),看看它们在使用方面与 isset() 相比如何。在这种情况下,函数 empty() 会更有意义。

对于未定义%_SERVER['ALL_HTTP']的问题,你应该使用isset()首先检查变量是否存在。示例:

if (isset($_SERVER['ALL_HTTP']) && strpos(strtolower($_SERVER['ALL_HTTP']), 'OperaMini') > 0) {
    $mobile_browser++;
}

缺少 404 文件的错误是我在不知道文件放置位置的情况下无法解决的问题。但是,您正在使用的包含正在寻找:

C:\Users\sanoj\Documents\NetBeansProjects\video-site-2\web4.html

您需要 create/move 该位置的文件,或者更改包含路径以指向正确的文件位置。你可以给我文件位置,我会给你正确的包含路径。

首先,NetBeans IDE 会向您显示这些警告,这样您就不会直接信任 $_REQUEST 值并以某种方式对其进行验证。通过检查 isset($_REQUEST['wap']),您已经在检查 IDE 所建议的部分。此过程可能还有其他步骤,您应该在 使用 之前执行这些步骤,例如插入数据库。我忽略了许多 NetBeans 警告,因为 NetBeans 不知道我将如何处理我的输入/变量。它只是警告我最佳实践,这可能对我的情况来说是最好的,也可能不是。 警告 应仅作为建议,而不是您必须 做的事情。

其次,如果你使用filter_input(),你不需要额外使用isset()。因为,filter_input() 已经在为您做这件事了。正如文档所说,

Return Values : Value of the requested variable on success, FALSE if the filter fails, or NULL if the variable_name variable is not set. If the flag FILTER_NULL_ON_FAILURE is used, it returns FALSE if the variable is not set and NULL if the filter fails.

因此您只需删除 isset() 并且您的代码应该可以安全运行。但您可能仍想检查该值是否设置为应用替代值。在这种情况下,只需使用 empty() 函数,当从 filter_input() 编辑的值 return 为 NULL / FALSE 时,它将 return FALSE .因此,只需否定符合您情况的条件。像这样-

if(!defined('WAP'))
{
    define('WAP', !empty(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) || !empty(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) || !empty(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))|| !empty(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));
}

 if (WAP)
{
    define('WIRELESS_PROTOCOL', !empty(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) ? 'wap' : (!empty(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) ? 'wap2' : (!empty(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)) ? 'iphone' : (!empty(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)) ? 'imode' : (!empty(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)) ? 'IEMobile' :(!empty(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)) ? 'html' : (!empty(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)) ? 'Android' : '')))))));
} 

第二个错误

Notice: Undefined index: ALL_HTTP

我在 $_SERVER 的 php 文档中找不到任何名为 ALL_HTTP 的变量。所以检查 link 并找到一个可以满足您的目的。我不确定你到底想用它得到什么,所以我不能提出任何建议。

第三个错误

Warning: include(web/404.html): failed to open stream.

错误提示文件不存在。因此,要么文件不存在,要么您提供的路径不正确。请检查并修复它。

您应该考虑使用更可靠的代码:

第 1 步:您在一个数组中获得符合您需要的变量

$tab=array_filter(filter_input_array(INPUT_SERVER,Array(
    'wap'     =>FILTER_SANITIZE_STRING,
    'wap2'    =>FILTER_SANITIZE_STRING,
    'imode'   =>FILTER_SANITIZE_STRING,
    'html'    =>FILTER_SANITIZE_STRING,
    'Android' =>FILTER_SANITIZE_STRING,
    'iphone'  =>FILTER_SANITIZE_STRING,
    'IEMobile'=>FILTER_SANITIZE_STRING)));

第 2 步:使用检测到的第一个变量

if(!defined('WAP'))&&(count($tab)) {
   define('WAP', $tab[0]);
}

此外,正如在其他答案中已经说过的,您必须使用 filter_input() 函数才能满足您的 IDE 警告 Do Not Access SuperGlobal $_REQUEST Array Directly

虽然第一部分没有直接回答您的问题,但它是一个重要说明,可能会在您的申请中为您省去很多麻烦。您错误地使用了常量,这可能会反噬您。

考虑以下代码:

if(!defined('WAP'))
    define('WAP', isset($_REQUEST['wap']) 
    || isset($_REQUEST['wap2']) || isset($_REQUEST['imode'])
    || isset($_REQUEST['html'])|| isset($_REQUEST['Android'])
    || isset($_REQUEST['iphone'])|| isset($_REQUEST['IEMobile']));

这些行表示“如果未定义 WAP,则如果以下任何项在 REQUEST 范围内,则为 WAP 分配真值:wap、wap2、imode、html、Android、iphone 或 IEMobile。如果它们不在请求范围内,请为 WAP 常量分配值 false。

我知道这可能感觉微不足道,但无论任何其他系统现实如何,常量都应该具有相同的值。常量应该很容易发现其值。看看 PHP 如何使用常量给出一个想法。 E_NOTICE 始终是相同的值。因此,您可以使用代表 E_NOTICE 的整数 (8),或者您可以使用 E_NOTICE 常量来获得相同的精确结果。

另一方面,如果 E_NOTICE 等于 8,除非您指定通知应触发致命错误,在这种情况下 E_NOTICE 等于 16(又名 E_CORE_ERROR), 那么你手上就会有点混乱。

为什么在这种情况下这很重要?

考虑您的代码:

if(!defined('WAP'))
{
    define('WAP', isset(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) 
    || isset(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) 
    || isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))
    || isset(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))
    || isset(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))
    || isset(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))
    || isset(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));
}

您正在做大量的心理操,以确保为特定会话设置一个常量。虽然有一些方法可以清理此代码以免触发错误,但它仍然会包含一个问题,该问题可能会再次困扰您,即您在应该使用的地方使用常量使用变量,或者更好的是,使用函数。

喜欢以下内容:

function is_wap()
{
    return (filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)
    || filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)
    || filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING)
    || filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING)
    || filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING)
    || filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING));
}

现在,将 WAP 替换为 is_wap()

更符合您的问题,您不能对直接函数调用使用isset()。您可以执行以下三种操作之一来规避此问题:

  1. 如 PHP 所建议的那样,改为使用 null !==。这可能是最简单的 shorthand 解决方案。

示例:

if (isset(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)))
    ...

可以像

一样简单地写成
if (null !== ($imode = filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING)))
    ...

也为您分配变量。

  1. 如果你坚持使用isset()那么你可以预先分配变量。

    $imode = filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING); 如果(isset($imode)) ...

  2. 您可以使用 function return 值来确定结果。如果第三方或内置函数没有正确的 return 值,您甚至可以创建自定义函数来为您处理逻辑。

例如,如果您只是想确保一个值不等于 null(您可以接受它为 false),您可以使用这个:

function isNotNull($val)
{
    return ($val !== null);
    // note that, because you've essentially passed the function result,
    // you could use this line instead:
    // return isset($val);
}

然后,在您的代码中,您可以使用自定义函数:

isNotNull(filter_input(INPUT_REQUEST, 'wap', FILTER_SANITIZE_STRING)) 
|| isNotNull(filter_input(INPUT_REQUEST, 'wap2', FILTER_SANITIZE_STRING)) 
|| isNotNull(filter_input(INPUT_REQUEST, 'imode', FILTER_SANITIZE_STRING))
|| isNotNull(filter_input(INPUT_REQUEST, 'html', FILTER_SANITIZE_STRING))
|| isNotNull(filter_input(INPUT_REQUEST, 'Android', FILTER_SANITIZE_STRING))
|| isNotNull(filter_input(INPUT_REQUEST, 'iphone', FILTER_SANITIZE_STRING))
|| isNotNull(filter_input(INPUT_REQUEST, 'IEMobile', FILTER_SANITIZE_STRING)));

请注意,因为 filter_input 如果过滤器失败则 return false,如果变量不存在则为 null。因此,完全省略 isset 可能更有利,这将导致您进行逻辑检查以确定变量是否存在,而过滤器可能会失败。

我应该注意到过滤器在生产中失败的可能性很低。回到我原来的观点,它如此低的原因之一是因为过滤器是常量,并且 ALWAYS 代表相同的东西。