PHP trigger_error kullanırken uygun satır numarasını almak nasıl?

4 Cevap php

Ben özel bir sınıfta hataları "atmak" için trigger_error kullanıyorum. Benim sorunum trigger_error denilen hat numarasını trigger_error yazdırır olmasıdır. Örneğin, aşağıdaki kodu verildi:

01    <?php
02        class Test {
03            function doAction() {
04                $this->doSubAction();
05            }
06            
07            function doSubAction() {
08                if(true)
09                    trigger_error('Custom error', E_USER_WARNING);
10            }
11        }
12        
13        $var = new Test();
14        $var->doAction();
15    ?>

PHP aşağıdaki yazdıracaktır:

In Warning: özel hata test.php çizgiye 9

Nasıl aşağıdaki gibi PHP (dahili yapılan tüm çağrıları görmezden, sınıfın dışından denilen yöntem) doAction () işlevi çağrıldı çizgi dönüş yapar?

In Warning: özel hata test.php çizgiye 14

Edit: Ben başarmak için çalışıyorum ne biraz daha yakın bir şey olması benim örnek Modifiye.

4 Cevap

Tamam, benim nihai çözümde ilgilenen kim o sizin için, ben biz test olabilecek tüm durumlarda doğru satır sayısını döndürür bizim çerçevesinde aşağıdaki kod parçasını entegre. Biz üretimde kullanıyor.

ErrorHandler class

Bu yakalanmamış PHP istisnalar, PHP hataları ve PEAR::Error s yakalar. Biraz kod bazı çerçeve, belirli fonksiyonlara sahip olan bunu değiştirmek gerekir, ama onlar aşağı izlemek zor olmamalı. Tadını çıkarın!

Yapılacak en iyi şey, tam bir yığın iz gösterir bir hata işleyicisi kurulur.

Bir özel hata işleyicisi kurmak ve onun içinde debug_print_backtrace () arayın. Bu özel durum yanı, genel olarak bu yararlı bulacaksınız.

İki seçenek, ne bir özellikle lezzetli vardır:

  • Varmı test () __LINE__ argümanları sunmak (örn. "test(__LINE__)", ve trigger_error için argüman vermek) geçersiz kılar. Özel bir hata mesajı yazdırmak için bir hata işleyicisi ayarlayın. NOTE: Bu dehşetengiz çirkin. :-)

  • Bir hata işleyicisi kurmak, ve) arama ve debug_backtrace ve dehşetengiz-büyük çıkış (işlemek var. Bu fonksiyon ayıklarken yararlı olabilir ... Ama yapmak için çalışıyoruz ne için overkill olabilir. Bir sistemin düzenli çalışması parçası olarak bu işlevi kullanmayın lütfen.

Kısa cevap: çok zor, kalkmayın. :-|

Ben genellikle bir trigger_error koymak () da var. Bu çağırdı ve tam olarak nerede gerçek hata oluştu tam olarak nerede olduğunu biliyorum emin olun. Ben o zaman üretimde bir e-posta kendime hataları göndereceğiz. Ben bu otomatik değil biliyorum, ama en azından ne olduğunu izleyebilirsiniz.