PHP farklı bilgisayara bağlı fiiller

4 Cevap php

Ben kod bilgisayarda çalışır php ile bir sorunu var ama alışkanlık başka bir işe

    function appendParam(&$req, $name, $value) {
	if (req == null) {
		return;
	}
	if (name == null) {
		return;
	}
	if (value != null) {
		$req[$name] = $value;
	}
}

Yukarıdaki bir bilgisayarda çalışır ve düzgün null karşı gön ve adını kontrol ve değişkenler yetisine sahip olduğunu durum dolar işaretleri (i dolar işaretleri koyduğunuzda bu bilgisayarda kırmak) gerekmiyorsa

ama aynı sonuç elde etmek için başka bir bilgisayarda aşağıdaki kodu kullanmanız gerekir

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
		$req[$name] = $value;
	}	
    if ($name == null) {
		return;
	}
    if ($req == null) {
		return;
	}
}

on this other computer it isn't capable of checking name or req against null (it breaks) and i need the dollar signs on the variables in the if condition.

Bir yan not olarak da bu bilgisayar zaten başlatılmış olan bir dizi endeks okuma yapamıyor gibi görünüyor.

Herhangi bir yardım takdir

4 Cevap

2 makine uyarı seviyeleri veya hata raporlama düzeyleri farklı olabilir.

Kafam karıştı, kesinlikle herhangi bir php değişken adının aksi aslında değişken üzerinde kontrol etmiyorsunuz önce $ öneki olmalıdır? Ne $ öneki kullanarak değil başarmak için çalışıyoruz

Bu kod benim için çok az mantıklı:

    function appendParam(&$req, $name, $value) {
    if ($value != null) {
                $req[$name] = $value;
        }       
    if ($name == null) {
                return;
        }
    if ($req == null) {
                return;
        }
}

Öyle gibi yazılmalıdır:

function appendParam(&$req, $name, $value)
{
 if(empty($name) || empty($value) || empty($req))
  return;

 $req[$name] = $value;
}

Dediğiniz zaman bunu "tatili" size işlevini kullanarak konum nasıl alma ve konum belirli bir örnek / hata verebilir? Ben yanlış kullanıyorsun düşünüyorum.

Bu konuda hata ayıklama basitleştirmek için onur için en iyi uygulamaları bir dizi vardır, bunlar BP de sorun daha net ortaya yapacak ve umarım kökünden çözmek ...

1) her şeyden önce sizin php.ini tutarlı emin olmalıdır ve aşağıdaki parametreler onlar optimal değere ayarlanır ki:

allow_asp_tag = Off ; there is no need to have such a tag usually short_open_tags = Off ; this avoids headaches when working with xml data/documents register_globals = Off ; this is the evil pre-4.1 default log_errors = On ; this two lines show_errors = Off ; are hopeful in production envs, when security is a need error_reporting = E_ALL & E_STRICT ; This makes every error to be displayed

2) hata iletileri kesip "@" operatörünün kullanımını önlemek, ele alınması gereken, gizli değil! Üstelik bu bir performans sorunu olduğunu

3) choose the right construct, operator or function to test conditions. I.E., if you are testing a variable is not "empty" not test it against the empty string ($v==""), this seems to work in general, but it relies on the implicit cast that the operator == forces, if you'd have used the === operator the test would not been what you wanted, of course

Daniel belirttiği gibi 4), işlevi daha iyi bir şekilde yazılabilir olabilir:


function appendParam(&$req, $name, $value)
{
    if (empty($name) || empty($value) || empty($req)) {  
        return;
    }
    $req[$name] = $value; 
}
If you [want|can]'t change your php ini it's a good practice to runtime set the log level, setting it in a config file as a debugging feature for example
    error_reporting = E_ALL | E_STRICT;

Benim cevabım tam olarak her hata raporlama sağlamaktır, ve PHP garip bir şey olduğunu size anlatacağım, o yabancılık (muhtemelen bir DİKKAT olacak) size sorunun kökü olacaktır.

Benim 2 sent :)

PHP eski bir sürümünü kullanıyor bilgisayarlardan biri olabilir mi?