PHP script tanımlanmamış değişkenleri bulmak için nasıl

6 Cevap php

Biz PHP fonksiyonu şu var varsayalım:

public function testSomething()
{
    $name = perform_sql_query("SELECT name FROM table WHERE id = $entity_id;");
    assert($name == "some_name");
}

Sorgu sözdizimsel olarak doğru, ama $ entity_id tanımsız beri - sorgu her zaman anlam yanlış olduğunu, 'id = 0' arayacaktır.

Ben onlar tanımsız değişken kullanmaya çalıştığınızda, otomatik olarak başarısız gibi işlevleri istiyorum. PHP böyle bir mekanizma var mı? Ya da belki bu gibi durumlarda bulmak için PHP kaynak kodu analiz etmek için kullanılabilecek bazı araç var mı?

UPDATE Bu tanımsız değişkenler yerde projede oluşabilir, bu yüzden doğru karar her fonksiyonu fonksiyon argümanları kontrol etmek olacaktır.

UPDATE2 hata işleyicisi ayarlama yardımcı oldu. Şimdi zaman başlatılmamış değişken kullanılır - istisnası atılır.

6 Cevap

Düşünün bir konu canlı bir site için, kullanıcıların hataları ve uyarıları görmek istiyorum olmayabilir olmasıdır. Bazı web-host php hata günlükleri bir error.log sağlar. İşte canlı siteleri için bir özel hata işleyicisi var:

function log_error($no,$msg,$file,$line)
{

    $errorMessage = "Error no $no: $msg in $file at line number $line";

    file_put_contents("errors_paypal.txt",$errorMessage."\n\n",FILE_APPEND);	
}

set_error_handler('log_error');

Bu konuda çok şey biçimlendirmek ve istediğiniz çeşitli bilgi dökümü olabilir.

Eğer all warning and notices açarsanız, bu dize değerlendirmek size bir hata mesajı atmak gerekir.

Ayrıca, (o olacak id= id=0 değil), bu yüzden perform_sql_query raporlama olmalıdır SQL geçersiz değerlendirmek olacağı da.

Benim değerler benim işlevi içinde null olarak eğer ben normalde kontrol edin. Sen isset () kullanın ve aynı zamanda eğer onun altında gibi bir şey kullanarak boş bir dize olabilir:

public function testSomething()
{    
    if(!empty($entity_id)){
            $name = perform_sql_query("SELECT name FROM table WHERE id = $entity_id;");    
            assert($name == "some_name");
            return true;
    }
    return false;
}

Ben de aşağıda satırını kullanarak raporlama hata ayarlarsınız:

error_reporting(E_ALL | E_STRICT);
  • Kullanarak php apps E_ALL için hata bildirimini ayarlayın:

    error_reporting (E_ALL);

Ya php.ini. Htaccess içinde değişken error_reporting için uygun değerleri ayarlayarak. Bu tanımlanmamış değişkenler ile ilgili olanlar dahil olmak üzere tüm hataları yakalamak için izin verir.

  • Geliştirme ortamında php hatalar.log kurmak ve gelişim aşamalarında dikkatle inceleyin.

Son olarak, yukarıda belirtilen kodu için, "perform_sql_query" fonksiyonunda işleme tüm sağduyu hatası bulunmaktadır. Sizin perform_sql_query fonksiyonu yani mysql_query (ve benzeri) işlevleri tarafından oluşturulan hatalara yönelik kontrol muhtemelen mysql_query fonksiyonu üzerinde bir sarıcı.

Değişkenleri ulasarak önce isset() işlevini kullanın.