我正在编写一个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') ) {
答案 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
}