Kütüphane kodu için E_STRICT ama benim kod kapatmak mümkündür?

4 Cevap php

Benim PHP uygulama include veya require_once ile içeren dosyalar için hata raporlama seviyesini (E_STRICT kapatmak) değiştirmek mümkün mü?

Benim kodunda meydana sıkı bildirimlerini görmek mümkün olmak istiyorum, ama ben ARMUT mdb2 kullanıyorum, ve ben E_STRICT açtığımda o koddan uyarıları sayfaları olsun.

Ben bir. Htaccess dosyası ile bir dizin başına temelinde error_reporting değiştirmek mümkün olduğunu biliyorum ama ben dahil bir dosyaları ile çalışır sanmıyorum. Ben armut klasöründe koyarak denedim ama hiçbir şey yapmadı.

4 Cevap

Sen hata nereden geldiğini belirlemek için define a custom error handler , and use the $errfile argüman olabilir. Yol yol sizin dahil kütüphane eşleşirse, hatayı bastırmak. Aksi halde, PHP'nin hata raporlama onu geçmek.

Bildiğim kadarıyla ben gördüğünüz gibi, bu kütüphane tarafından kaynaklanan herhangi bir ve tüm uyarıları ve bildirimleri yakalamak gerekir.

Hiçbir backtrace gerekli olduğundan, tetiklenen mesajları bir sürü için bile yeterince hızlı muhtemelen.

Bu denenmemiş ama kılavuzda örneğine dayanarak, çalışması gerekir:

<?php
// error handler function
function myErrorHandler($errno, $errstr, $errfile, $errline)
{

    $library_path = "/path/to/library";
    if (substr($errfile,0,strlen($library_path))==$library_path)
    /* Don't execute PHP internal error handler */
     return true;
    else
    /* execute PHP internal error handler */
     return false;
}

Hayır, mümkün değil. Var

ini_set('error_reporting', E_NOTICE);

Ama bu bütün fonksiyon / metod diğer / kütüphane dosyaları tanımlanan konum çağrısı bile etkileyecektir.

Bir çok kirli kesmek gibi, sınıfların tüm uzatmak ve büyü __call yöntemi güveniyor. Bu kafamın üst kapalı, yani yazım hataları / brainfarts için beni vurmayın:

class MyDb {
    protected $pearDb; // Instantiate this in your constructor.
    public function __call() {
        $oldReporting = error_reporting(~E_STRICT);
        $result = call_user_func_array(array($this->pearDb, __FUNCTION__), func_get_args());
        error_reporting($oldReporting);
        return $result;
    }
}

Bana daha ayrıntılı olarak çalışmak istiyorsanız bana bildirin.