[ Pobierz całość w formacie PDF ]
.Ostatnie wywo³anie powoduje dodanie komunikatu b³êdu do pliku, w tym przypadku/tmp/error.log.Wykorzystanie tego mechanizmu nie jest w dos³ownym znaczeniu uruchamianiem, alejego zastosowanie mo¿e zaoszczêdziæ czas spêdzony przy w³aœciwym uruchamianiu,powoduj¹c eliminacjê niektórych b³êdów i przeoczeñ ju¿ w fazie programowania.Jak wczeœniej wspomnia³em, unikanie uruchamiania programu poprzez tworzeniepoprawnego kodu jest o wiele cenniejsze od najlepszych narzêdzi u¿ywanych przyuruchamianiu.W³asna obs³uga b³êdówTak jak prawie ka¿dy element PHP mechanizm obs³ugi b³êdów mo¿esz dostosowaæ dow³asnych potrzeb, aby spe³nia³ wymagania stawiane przez aplikacjê.Jak pokazanezosta³o na koñcu poprzedniego przyk³adu, funkcja error_log() pozwala naskonstruowanie prostego mechanizmu rejestrowania w³asnych b³êdów wystêpuj¹cychw aplikacji, ale nie pozwala na obs³ugê b³êdów generowanych przez PHP.Niepozwala równie¿ na przechwytywanie komunikatów generowanych przez funkcjeassert().Na szczêœcie PHP pozwala w inny sposób obs³ugiwaæ takie przypadki.Funkcja set_error_handler() pozwala zarejestrowaæ funkcjê w PHP, która bêdziewywo³ywana za ka¿dym razem, gdy wygenerowany zostanie komunikat b³êdu.Funkcjaset_error_handler() wymaga podania jednego argumentu — nazwy funkcji obs³ugib³êdów.Prototyp takiej funkcji wygl¹da nastêpuj¹co:function ErrorCallBack( int nr_bledu, string ciag_bledu, string nazwa_skryptu,int nr_lini, array kontekst)Na wydruku 10.6 zamieszczony jest przyk³ad sposobu rejestrowania i u¿yciafunkcji obs³ugi b³êdów.Wydruk 10.6.Wykorzystanie set_error_handler()W³asna obs³uga b³êdówW skrypcie na wydruku 10.6 zosta³a zdefiniowana funkcja obs³ugi b³êdówmyErrorHandler(), która wyœwietla komunikaty b³êdów w obramowanej tabelizawieraj¹cej jedn¹ komórkê, co pomaga w odró¿nieniu komunikatu b³êdu od resztykodu HTML.Po zainstalowaniu funkcji obs³ugi, skrypt powoduje dwa b³êdy.Pierwszy jest generowany przy u¿yciu funkcji PHP trigger_error().Drugi b³¹d(ostrze¿enie) jest identyczny jak b³¹d pokazany na wydruku 10.3.Na rysunku10.4.pokazany zosta³ wynik dzia³ania skryptu.Rysunek 10.4.Dzia³anie funkcji set_error_handler()U¿ywaj¹c funkcji set_error_handler() nale¿y pamiêtaæ, ¿e PHP nie przekazuje dofunkcji obs³ugi b³êdów typu E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,E_COMPILE_ERROR oraz E_COMPILE_WARNING.Obs³uga tego typu b³êdów przezu¿ytkownika nie jest bezpieczna.Z tego powodu w kodzie funkcji obs³ugi b³êdówz wydruku 10.6.pojawi³y siê komentarze „nie powinien wyst¹piæ”.Uwaga na temat set_error_handler()Funkcja set_error_handler() jest dostêpna w PHP od wersji 4.1.Dodatkowo,funkcja u¿yta w tym przyk³adzie posiada piêæ parametrów, w tym nazwê skryptu,numer linii i dane kontekstu.Parametry te s¹ dostêpne dopiero w wersji 4.2.Wczeœniejsze wersje mia³y tylko dwa parametry: typ komunikatu i komunikat.W skrypcie z wydruku 10.6 nie s¹ wykorzystane dane na temat kontekstu.Bêd¹ oneopisane w nastêpnej czêœci rozdzia³u.Dane te zawieraj¹ nazwy i wartoœcizmiennych istniej¹cych w skrypcie w momencie wyst¹pienia b³êdu.Równie¿ funkcja assert() pozwala na zdefiniowanie wywo³ywanej funkcji.Aby tozrealizowaæ nale¿y skorzystaæ z funkcji assert_options().Funkcja obs³uguj¹canieudane asercje jest zdefiniowana w nastêpuj¹cy sposób:function AssertCallback ($NazwaPliku, $NrLinii, $Asercja )Uwaga na temat assert_options()W PHP do wersji 4.2 w³¹cznie, w funkcji assert_options() wystêpowa³ ma³yb³¹d.Wystêpowa³ on w przypadku wywo³ania funkcji w postaciassert_options(ASSERT_CALLBACK), w celu odczytania ustawionej funkcji obs³ugi.Mimo, ¿e w dokumentacji napisano, ¿e wywo³anie takie zwróci jedynie nazwêbie¿¹cej funkcji obs³ugi, to dodatkowo oprócz zwracania nazwy, bie¿¹ceustawienie funkcji obs³ugi by³o czyszczone.Dlatego je¿eli chcesz u¿yæ funkcjiassert() z funkcj¹ obs³ugi upewnij siê, ¿e nie jest wywo³ywana póŸniej funkcjaassert_options() w celu sprawdzenia nazwy zarejestrowanej funkcji.B³¹d tenzosta³ zauwa¿ony i poprawiony w wersjach PHP powy¿ej 4.2.Na wydruku 10.7.pokazany zosta³ przyk³ad zdefiniowania i u¿ycia funkcjiwywo³ywanej przez assert().Wydruk 10.7.Wykorzystanie funkcji wywo³ywanej przez callback()W³asna obs³uga asercjiNieudana asercja.Kod z wydruku jest podobny do tego z wydruku 10.6.Wywo³anie asercji powodujewyœwietlenie jednokomórkowej tabeli.Je¿eli nie zostanie opcja ASSERT_WARNING,oprócz informacji zdefiniowanych przez u¿ytkownika wyœwietlony zostaniestandardowy komunikat PHP.Na rysunku 10.5.pokazany jest wynik dzia³aniaskryptu z wydruku 10.7.Rysunek 10.5.U¿ycie funkcji zdefiniowanej dla assert()PHP posiada elastyczny mechanizm obs³ugi b³êdów.Pozwala on dziêki temu pisaækod ³atwiejszy do uruchamiania i póŸniejszego utrzymania.W nastêpnej czêœcipo³¹czymy wszystkie przedstawione do tej pory techniki, co w efekcie pozwolilepiej uruchamiaæ programy w ca³ym cyklu produkcyjnym.Zaawansowana obs³uga b³êdówPo omówieniu technik obs³ugi b³êdów mo¿emy rozpocz¹æ tworzenie ogólnegonarzêdzia do obs³ugi b³êdów.Motywacj¹ do napisania tego fragmentu by³ brakdostarczanych przez PHP narzêdzi, które automatycznie ³¹cz¹ ró¿ne typy danych ob³êdach.Oprócz tego, PHP 3 posiada³ mo¿liwoœæ zdalnego uruchamiania, która niezosta³a przeniesiona do PHP 4.Pozwala³ on przesy³aæ dane za pomoc¹ protoko³uTCP/IP do innego komputera.Opcja ta prawdopodobnie nied³ugo siê pojawi, ale narazie musz¹ wystarczyæ podstawowe techniki obs³ugi b³êdów opisane w tymrozdziale.Przyk³ad przytoczony w tej czêœci jest niezwykle d³ugi, wiêc zostanie omówionywe fragmentach.Modu³ ten znajduje siê w jednym pliku, MyDebug.php i bêdzie onokreœlony jako modu³ MyDebug.Jest on tak utworzony, ¿e mo¿e byæ ³atwodo³¹czony do dowolnego skryptu PHP.Po do³¹czeniu pliku wykonywany jest kodpokazany na wydruku 10.8.Wydruk 10.8
[ Pobierz całość w formacie PDF ]