Jump to content
php.lv forumi

Kāpēc PHP tik ļoti sux'o, bet tomēr mēs visi to lietojam


daGrevis

Recommended Posts

Kāda iksa pēc man dokumentācijā jāmeklē, ka jāizsauc funkcija libxml_use_internal_errors(true), lai minētais cikls nenobeigtos ar Fatal Error? Normāli būtu, ja bez apstrādes izmestos exception, kura nosaukumu pēc tam es ieliktu kodā un varētu noķert arī dokumentāciju vispār neatverot.

Manuprāt tā tieši ir priekšrocība,ka skripts kategoriski neizbeigsies no sevis neatkarīgu apstākļu dēļ,respektīvi šajā gadījumā dēļ līka xml,un uzdodot libxml_use_internal_errors(true) vēsā mierā to var turpināt parsēt kaut vai ar XPath un neuztraukties par nekādiem exceptioniem. Neesmu nekad mēģinājis XML lietas iekš Python,bet tāpēc jautājums tīri interesei: kas tur notiks identiskā gadījumā? Ielasam XML,izrādās ka tas ir nevalīds,noķeram exceptionu un ....? Izvadam glītu paziņojumu ka XML diemžēl nevar tikt apstrādāts un viss beidzas?

Edited by 404
Link to comment
Share on other sites

  • Replies 253
  • Created
  • Last Reply

Top Posters In This Topic

.. un neuztraukties par nekādiem exceptioniem. Neesmu nekad mēģinājis XML lietas iekš Python,bet tāpēc jautājums tīri interesei: kas tur notiks identiskā gadījumā? Ielasam XML,izrādās ka tas ir nevalīds,noķeram exceptionu un ....? Izvadam glītu paziņojumu ka XML diemžēl nevar tikt apstrādāts un viss beidzas?

Rodas iespaids, ka tā īsti nav sapratnes par to, kas ir Exception un kā tos pareizi lieto. Programmētājs, kas saprot, ko dara, par Exceptioniem neuztraucas. Pat otrādi, viņš tos lieto, tā ir daļa no aplikācijas projektējuma.

 

P.s.: http://php.lv/f/topic/20520-ka-panakt-lai-loop-turpinas-pec-fatal-error/page__view__findpost__p__160015

Edited by Mr.Key
Link to comment
Share on other sites

Lai uzkurinātu šo topiku vēl vairāk...

 

Ar laiku gan jau sāks Python/Ruby izmantot, gan arī Windows nīst... gan iekš Vim kodēt, gan ne tik ļoti censties pierādīt, ka pašiem nav taisnības.

Link to comment
Share on other sites

Nu pārliecība bija balstīta uz vienkāršu pieņēmumu:

Ir jāielasa XML par katru cenu,tāpēc pēc internal_errors uzsetošanas exceptions kļūst nevajadzīgs jo try būs pozitīvs jebkurā gadījumā. Kļūdos?

Link to comment
Share on other sites

Lai uzkurinātu šo topiku vēl vairāk...

Interesanti,kur tu eļļu dabūsi kad viss jau nokurināts.

Ar laiku gan jau sāks Python/Ruby izmantot

Neviens škiet neteica ka Python nav lietojams. Bija pašam vajadzība pēc primitīva skripta,kas KDE4 vidē nolasa no clementine playera metadatus,noformē un iemet iekš skype. Ar Python to izdevās norealizēt pārdesmit minūtēs un nevienu brīdi neienāca prātā doma,ka to vajag darīt ar PHP un pēc tam aizstaigāt uz kādu pitonistu forumu viņiem apskaidrot,ka nahren viņiem to Python vispār nevajag.

gan arī Windows nīst...

Kopš pagājuša gadsimta neesmu windows lietojis,bet nevaru nekā noskaņoties zvērīgam naidam. Ko darīt?

gan iekš Vim kodēt

Piekrītu. Visi profi kodē Vim'ā un neizmanto kaut kādas tur vēl IDE's

gan ne tik ļoti censties pierādīt, ka pašiem nav taisnības.

Parādi lūdzu kādu forumu kurā valda vienprātība uzskatos. Tādā gadījumā pasaulē būtu 1 programmēšanas valoda,1 os un 1 autoritāte. Ideāla nākotne,uz kuru jau tagad google tiecas.

Edited by 404
Link to comment
Share on other sites

Nu pārliecība bija balstīta uz vienkāršu pieņēmumu:

Ir jāielasa XML par katru cenu,tāpēc pēc internal_errors uzsetošanas exceptions kļūst nevajadzīgs jo try būs pozitīvs jebkurā gadījumā. Kļūdos?

 

Kas gan tā par situāciju, ka XML jāielasa par katru cenu? Ja XML ir kļūdains, tad par katru cenu ielasīsi to? Reizēm tas nozīmē pilnīgi pretējo, ka šāds XML NAV jāielasa, jo kāpēc gan ielasīt kļūdainu XMLu? Vai tu gribētu, ka tavā bankas kontā tiktu ielasīts kļūdains XML? :) Bet tas nav jāuztver burtiski, vairāk tas tā, priekš pārdomām...

 

Bet, ja tas patiešām ir tā, ka jāielasa par katru cenu, arī tad, ja aplikācija izmet Exception, tad ir jālabo aplikācija, nevis jāizslēdz Exception. Jo Exception nozīmē to, ka ir izņēmumsituācija. Respektīvi, situācija nav normāla! Daļu izņēmumsituāciju programmētājs parasti paredz, tādēļ, izmantojot to, ka Exception ir dažādu tipu, programmētājs tad šīs paredzētās izņēmusituācijas var apstrādāt savā programmā. Tas neizslēdz to, ka daļā situāciju darbs tiek turpināts. Pseidokodā:

 

for xmlNode in xmlNodes:
try:
   	doSomethingWithNode(xmlNode); // throws NumberFormatException
catch NodeEmtpyFriendlyException e:
   	// Mēs zinām, ka šitā var gadīties, turpinām darboties
   	// nothing
catch NumberFormatException e:
   	// Atkal zināma situācija, taču neprasa apturēšanu
   	warn "Kļūda " + e.getTraceAsString();
   	xmlNode->numurs = 0; // patiesībā pat varam sagremot
catch Exception
   	// Nezināms, neparedzēts Exception, sūtam epastu
   	email "Slikti";
   	// un, pieņemsim, ka mums jātaisa rollback...
   	rollback();
   	throw new AppException('Application encountered an unexpected XML, rolled back'); // šito uzķers augstāka līmeņa objekts un, piemēram, attēlos lietotājam draudzīgu error lapu (vai lodziņu) bez Stack traces, ierakstīs kļūdu logā utt.
end;
end;

 

Kas attiecas uz šo te:

tāpēc pēc internal_errors uzsetošanas exceptions kļūst nevajadzīgs jo try būs pozitīvs jebkurā gadījumā.
Kā jau skaidroju, Exceptions nevar būt nevajadzīgs. Exceptions ir neatņemama OOP sastāvdaļa (tāda, kādu to pazīst JAVA, C# u.c.). edgarsj jau norādīja, PHP pusē tā ir liela problēma, ka tas nav tīrs OOP un grūti ir ar to kļūdu apstrādi. Piemēram, ja JAVĀ augstākā līmeņa objekts uzķers visus Exception (bubble up princips), tos visus šajā objektā var logot ar pilnu stack trace un vēlāk debugot, tad PHP pusē aplikācija var vienkārši nomirt ar Erroru un ej nu saproti, kas un kā, un kapēc. Edited by Mr.Key
Link to comment
Share on other sites

Tādēļ tev patīk strādāt ar šādām valodām - http://wiki.python.o...ython2orPython3 :) Mēs iesakām izvēlēties python3, jo tā ir nākotne, bet uz python3 vēl nav visas bibliotēkas pieejamas, tādēļ varbūt jums tomēr labāk būs izvēlēties python2, kurā uzrakstītais kods pēc tam, protams, nestrādās uz python3.

 

Kodējot py2 kodu atbilstoši py3k guidelines, ar šo rīku visu automatizēti var pārkonvertēt - http://docs.python.org/library/2to3.html. Lielais migrācijas process komūnā noris lēni, bet nenovēršami. Prognozēju, ka pēc 2-3 gadiem Python 3 būs noklusētais standarts.

 

Labāk parunāsim par to, ka PHP pat minor versijām ir backwards incompatible izmaiņas ;)

Link to comment
Share on other sites

Kas gan tā par situāciju, ka XML jāielasa par katru cenu? Ja XML ir kļūdains, tad par katru cenu ielasīsi to? Reizēm tas nozīmē pilnīgi pretējo, ka šāds XML NAV jāielasa, jo kāpēc gan ielasīt kļūdainu XMLu?

Ideālā pasaulē jā,bet reāli pēc paša pieredzes ir nācies secināt ka ir jāstrādā ar to kas ir,nevis jāpieprasa un jācer ka sources autors risinās problēmu. Un ja reiz līkais XML ir iedabūts objektā,tad arī nodes nekad nav bijis problēmu apstrādāt. Es saprotu un nestrīdos ka vajag exceptionus visur kur tas var būt kritiski,bet ar ko tevis minētais:

try:
doSomethingWithNode(xmlNode); // throws NumberFormatException
 catch NodeEmtpyFriendlyException e:

būs labāks par:

if(is_object($xmlNode) && $xmlNode->length) {
	// Viss notiek
}

Ar HTML saturu situācija vispār nekontrolējama. Tur ieteikums neparsēt neiet cauri.

Kas attiecas uz OOP,tad tas viss ir forši,bet kaut kādos mini skriptos neredzu problēmu,kāpēc lai to visu maksimāli vienkārši neizdarītu.

Edited by 404
Link to comment
Share on other sites

Uz tādiem ko var atļauties ramā lasīt. Bezgalīgu XML nav nācies parsēt,bet arī gigabaitīgam SAX handleros neredzu,ko tādu svarīgu tur varētu ar Exceptions darīt,tā vietā lai vienkārši true|false nočekotu.

Link to comment
Share on other sites

Kura tad ir tā viena googles valoda?

 

Tādā gadījumā pasaulē būtu 1 programmēšanas valoda,1 os un 1 autoritāte. Ideāla nākotne,uz kuru jau tagad google tiecas.

Link to comment
Share on other sites

Es saprotu un nestrīdos ka vajag exceptionus visur kur tas var būt kritiski,bet ar ko tevis minētais:

try:
doSomethingWithNode(xmlNode); // throws NumberFormatException
 catch NodeEmtpyFriendlyException e:

būs labāks par:

if(is_object($xmlNode) && $xmlNode->length) {
// Viss notiek
}

 

1) es saku, ka konkrētajā gadījumā, tas, ka nav iespējas ar Exception apstrādāt, bet uzreiz ir Fatal Error ir čerez ž.

2) tu man uzbrauc, ka man nepatīk "papildus iespējas izmantot to apstrādes metodi kura liekas konkrētā gadījumā ērtāka"

3) paprasu tev parādīt, kā tad es varu lietot Exception konkrētajā gadījumā

4) sāc stāstīt, cik viss īstenībā ir kruta bez Exception, kaut arī neizproti to būtību

 

WAT?

 

 

Kas attiecas uz OOP,tad tas viss ir forši,bet kaut kādos mini skriptos neredzu problēmu,kāpēc lai to visu maksimāli vienkārši neizdarītu.

Tad PHP ir tikai mini skriptiem paredzēta?

 

Tur mēs laikam pat varētu būt vienisprātis

Link to comment
Share on other sites

Kura tad ir tā viena googles valoda?

Es runāju par google tieksmi visu pakļaut savai kontrolei,un tikai priecāšos ja pēc gadiem 10 pierādīsies,ka paranoja būs izrādījusies pilnīgi nepamatota un arī Go! ir tikai tāds ņezahuj darīt prikols bez nekādiem tālejošiem plāniem.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...