PHP İki Negatif veya şartlar birleştiren

2 Cevap

Ben bir PHP sitesi yazıyorum ve site etkinliğini izlemek için Google Analytics kullanıyorum.

Ben ortak site altbilgiye dahil edilebilir izleme kodu, yankı olacak bir fonksiyon yazdım.

Şey (Ben çok zor kod bu sefer seçtiniz önce Google Analytics'in IP filtresi ile karışık sonuçlar elde ettik) bizim ofis isabetleri izlemek istemiyorum, ve yönetici sayfalara vurur.

Yani sözde kod olurdu,

IF (PHP_self does contain admin) OR (IP address is not office) echo tracking code

Ben bu yazdığım gerçek yoludur:

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

Bunu yapmak için en iyi yolu nedir?

Ben şu denedim ama işe yaramadı:

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

2 Cevap

De Morgan's laws, ikinci && yerine || kullanımı gerektiği anlamına gelir.

Her iki şekilde karşılaştırma ne yan etkileri olduğu gerçeğine dayanarak, gayet iyi.

Eğer koşul yanlış olduğunda bir şey yapmak (ve aksi takdirde hiçbir şey yapmak) istiyorum çünkü, durum negatif olmalıdır. Karşılaştırmak

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

// GOOD
if(not_something)
  do the job

(| - önceden önerildiği gibi, &&> |) yani, ikinci seçenek gitmek için yoludur.

Bunun yanı sıra, early exits, genellikle karmaşık koşulları daha iyidir

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