PHP结合两个负OR条件

时间:2010-02-19 10:21:39

标签: php

我正在编写一个PHP网站,并使用谷歌分析来跟踪网站活动。

我写了一个能够回显跟踪代码的函数,它可以包含在公共站点页脚中。

问题是,我不希望它跟踪我们办公室的点击量(我之前已经使用Google Analytics的IP过滤器获得了不同的结果,因此这次选择硬编码),然后点击管理页面。

所以伪代码就是,

IF(PHP_self确实包含admin)或(IP地址不是办公室) 回声跟踪代码

我写这个的实际方式是:

if (!( (substr($_SERVER['PHP_SELF'], 0, 7) == '/admin/') || ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') )) {

这是最好的方法吗?

我尝试了以下但是没有用:

if ( (substr($_SERVER['PHP_SELF'], 0, 7) != '/admin/') || ($_SERVER['REMOTE_ADDR'] != 'xxx.xxx.xxx.xxx') ) {

2 个答案:

答案 0 :(得分:4)

De Morgan's laws表示第二个应使用&&代替||

无论哪种方式都没有问题,因为这两种比较都没有副作用。

答案 1 :(得分:1)

因为你想在条件为假时做某事(否则什么也不做),条件应该是否定的。比较

// BAD
if(something) {
   ???
} else {
   do the job
}

// GOOD
if(not_something)
  do the job

所以,第二种选择是去的方式(|| - >&&,如已经建议的那样)。

除此之外,early exits通常比复杂条件更好

function echo_counter() {
    if(is_admin_page)
         return;
    if(intranet_ip)
         return;
    ...potentially some more conditions...
   do the job
}