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

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

1) Joprojām neredzu trūkumu valodā,ja viss nav pakļauts Exception,bet gan ir iespēja ignorēt kļūdu un pārbaudot funkcijas vērtību,turpināt darbu ja viss ok.

2) Ar frāzi par apstrādes metodi biju domājis iespēju gan rakstīt savus handlerus,gan ignorēt kļūdu,gan izmantot Exception ja uzskata to par vajadzīgu (pats neuzskatu ka vajag dajebkur) pašā valodā nevis tikai šajā reizē. Ja viss tas pats pieejams arī iekš pitona,tad ļoti atvainojos.

3) Piekrītu,ka nevar šajā gadījumā. Neskatoties uz to,problēma tika topikā lieliski atrisināta un trūkumu valodā tā arī neatradu,jo laikam nav sajēgas par OOP

4) Palieku pie viedokļa ka try/catch nav vajadzīgs pie katras funkcijas. Nu tā mana problēma. Bankas sistēmas nekodēju.

Link to comment
Share on other sites

  • Replies 253
  • Created
  • Last Reply

Top Posters In This Topic

1) Joprojām neredzu trūkumu valodā,ja viss nav pakļauts Exception,bet gan ir iespēja ignorēt kļūdu un pārbaudot funkcijas vērtību,turpināt darbu ja viss ok.

2) Ar frāzi par apstrādes metodi biju domājis iespēju gan rakstīt savus handlerus,gan ignorēt kļūdu,gan izmantot Exception ja uzskata to par vajadzīgu (pats neuzskatu ka vajag dajebkur) pašā valodā nevis tikai šajā reizē. Ja viss tas pats pieejams arī iekš pitona,tad ļoti atvainojos.

3) Piekrītu,ka nevar šajā gadījumā. Neskatoties uz to,problēma tika topikā lieliski atrisināta un trūkumu valodā tā arī neatradu,jo laikam nav sajēgas par OOP

4) Palieku pie viedokļa ka try/catch nav vajadzīgs pie katras funkcijas. Nu tā mana problēma. Bankas sistēmas nekodēju.

 

1) Normālā gadījumā tiek izmests exception, tu to noķer, apstrādā un turpini darbu, jo viss ok.

2) Python visa kļūdu apstrāde balstās uz exceptions un tur arī var izvērsties pēc sirds patikas ar ignorēšanu, saviem handleriem utt. Iespējams īsti nesapratu, ko domāji.

3) Trūkums valodā ir tas, ka nomirst ar Fatal Error bez normāla stacktrace logfailos, ja nemēģina uzminēt kur un kā varētu būt kļūda un to apiet. Kā jau Atslēgas kungs mēģināja paskaidrot.

4) Protams, pie katras funkcijas tas nav vajadzīgs. Ir vajadzīgs, lai būtu skaidrs, kas nogāja greizi un vismaz viens standarta mehānisms, kas der visos kļūdu apstrādes gadījumos.

 

Ar labu nakti.

Edited by edgarsj
Link to comment
Share on other sites

Tak var jau PHP uzrakstīt php erroru handleri un automātiski mest exceptionus uz visām kļūdām. Protams, es piekrītu, ka šis ir PHP mīnuss, bet salīdzinoši viegli risināms, PHP plusi tomēr pārspēj citas skriptu valodas priekš weba.

Link to comment
Share on other sites

Tiem, kuri deva linkus uz "A fractal of bad design", iesaku palasīt šo: http://marc.info/?t=133407516900003&r=1&w=2 - tas no php-internals mailing list diskusijas par šo rakstu. Atvers dažiem acis, kā tā raksta autors PHP redzēja tālajā bērnībā.

 

Par XML apstrādi. Čaļi, jus esat ķerti vai? Jums ko, nav ne jausmas ka XML apstrāde bāzējās uz C libxml2 bibliotekas, kuraj ir uzrakstīts wrapper lai ar to varētu strādāt PHP skriptos? Atvainoiet man, bet tā kā PHP error handling ir tāds, kāds viņš ir (vēsturiski, un tiem kas grib Exception - lūdzu, tas ir darams pāris koda līnijās) - strādā ar to. Un viss būtu labi, ja libxml2 nebūtu sava ideja kā darboties ar XML kļūdām - viņai ir savs iekšējais error handling mehanisms, kuru izraut no tās nav iespējams.

 

Starp citu, par valid XML. Ho-ho, čali. Es strādāju daudz ar visāda veida merčantiem, bankām u.t.t. API - man katra XML atbilde obligāti tiek apstrādāta ar libxml_use_internal_errors(true) - praktiski visi laiku pa laikam kaut ko sačakarē ar XML, ka parsers nevar to apstrādāt. Pāris gadijumos XML'am nebīja root node pavisam. Citos gadijumos ja notiek kāda kļūda - XML var būt neprognozējams. Un man caur manu sistēmu mēnesī parplūst pāris miljoni usd - man ir jagarantē ka es saņēmu notifikāciju caur XML API un ja es pats kaut ko sūtu un man atbildē ir sūds, bet tajā sudā ir rakstīts ka operācija tika izpildīta - man to ir jazin. A jūs te sakat jāmet Exception un beigt darbu. Vajadzētu dažus iemest vidē, kur nauda plūst un paskatīties kā tās oliņas saspiedīsies, kad sanāks ka tāda gudrinieka dēļ kaut kur palika kādi 10-15 tūkstoši.

 

Velns parāvis - da paskataties uz to, kas jums ir savajās valodās - puse biblioteku būs "binding to the C library witch exposes functions ...". Un ja paskatities reali - gandrīz katrajā var atrast kaut ko tādu, uz ko var rādīt ar pirkstu un ņirgāties. Ruby/Python tika radītas speciāli, un vienālga tām ir savas problēmas. PHP radijās netīšām, un attīstās. Strauji attīstās un paliek labāks, tīrāks. Un tās, ka tām ir problēmas ar standarta biblioteku (funkciju nosaukumi, parametru secība) - visi to zin, bet lai to majnīt ir vajadzīgi milzīgi resursi. Un vel jāpatur BC. Un vispāri nevienam tas nemaisa tik stipri, lai kāds uzsāktu šo procesu.

Link to comment
Share on other sites

Labrīt kungi :)

 

Tak var jau PHP uzrakstīt php erroru handleri un automātiski mest exceptionus uz visām kļūdām. Protams, es piekrītu, ka šis ir PHP mīnuss, bet salīdzinoši viegli risināms, PHP plusi tomēr pārspēj citas skriptu valodas priekš weba.

 

Vai minētajā gadījumā (http://php.lv/f/topi...ec-fatal-error/) tavs error handleris noķers to Fatal Error? Nē? Tad par ko tu runā? Izplati bullshit kā parasti. Trollis.

 

Tiem, kuri deva linkus uz "A fractal of bad design", iesaku palasīt šo: http://marc.info/?t=...6900003&r=1&w=2 - tas no php-internals mailing list diskusijas par šo rakstu. Atvers dažiem acis, kā tā raksta autors PHP redzēja tālajā bērnībā.

paklikšķināju uz pāris ziņām, nekā tāda neredzēju. varbūt ir kāds konkrētāks links? kaut gan tas, ko mēs visi esam redzējuši / domājuši bērnībā ir diezgan nesvarīgi (es piem. biju tīri lielā sajūsmā par Basic).

 

Par XML apstrādi. Čaļi, jus esat ķerti vai? Jums ko, nav ne jausmas ka XML apstrāde bāzējās uz C libxml2 bibliotekas, kuraj ir uzrakstīts wrapper lai ar to varētu strādāt PHP skriptos? Atvainoiet man, bet tā kā PHP error handling ir tāds, kāds viņš ir (vēsturiski, un tiem kas grib Exception - lūdzu, tas ir darams pāris koda līnijās) - strādā ar to. Un viss būtu labi, ja libxml2 nebūtu sava ideja kā darboties ar XML kļūdām - viņai ir savs iekšējais error handling mehanisms, kuru izraut no tās nav iespējams.

 

Reducējamies uz to, ka sāpe ir tieši tajā wrapperī. Nez kāpēc priekš Python tāds wrapperis uztaisīts ar visām Exception. Un šis nav vienīgais sūkājošais wrappers.

 

Starp citu, par valid XML. Ho-ho, čali. Es strādāju daudz ar visāda veida merčantiem, bankām u.t.t. API - man katra XML atbilde obligāti tiek apstrādāta ar libxml_use_internal_errors(true) - praktiski visi laiku pa laikam kaut ko sačakarē ar XML, ka parsers nevar to apstrādāt. Pāris gadijumos XML'am nebīja root node pavisam. Citos gadijumos ja notiek kāda kļūda - XML var būt neprognozējams. Un man caur manu sistēmu mēnesī parplūst pāris miljoni usd - man ir jagarantē ka es saņēmu notifikāciju caur XML API un ja es pats kaut ko sūtu un man atbildē ir sūds, bet tajā sudā ir rakstīts ka operācija tika izpildīta - man to ir jazin. A jūs te sakat jāmet Exception un beigt darbu. Vajadzētu dažus iemest vidē, kur nauda plūst un paskatīties kā tās oliņas saspiedīsies, kad sanāks ka tāda gudrinieka dēļ kaut kur palika kādi 10-15 tūkstoši.

 

Dārgais Guru, piemēros augstāk taču bija rakstīts, ka varam izmesto Exception noķert, attiecīgi apstrādāt un turpināt darbu. Arī tev nav zināms, kā pareizi strādāt ar Exception mehānismu? Es gaidīju, ko vairāk no PHP internals listes biedra un valodas virziena iespaidotāja. Bet, acīmredzot, tas kā reizi ir piemērs, kāpēc ar PHP ir kā ir.

 

PHP radijās netīšām, un attīstās. Strauji attīstās un paliek labāks, tīrāks. Un tās, ka tām ir problēmas ar standarta biblioteku (funkciju nosaukumi, parametru secība) - visi to zin, bet lai to majnīt ir vajadzīgi milzīgi resursi. Un vel jāpatur BC. Un vispāri nevienam tas nemaisa tik stipri, lai kāds uzsāktu šo procesu.

 

Tieši tāpēc arī man PHP nepatīk lietot, jo trūkumu ir stipri vairāk kā citām valodām tevis minēto iemeslu dēļ. Un neviens tos nelabos. Ja tev patīk, tad lieto un priecājies.

 

Par Backwards Compatibility - ar prieku skatos uz Python3, kur beidzot visi stringi by default būs unicode. Tur viņi nebaidās uzlabot valodu, salaužot BC. Jo arī piedāvā skaidru ceļu, kā migrēt.

Link to comment
Share on other sites

Kur problēma?

 

http://codepad.org/njb3juqT

 


function error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("error_handler");

$doc = new DOMDocument();
try {  
 $doc->loadXML('<root><sajats xml></root>');
} catch (Exception $e){
 echo "lalala";
}

 

bez error handlera: http://codepad.org/Jt7ol0ho

Link to comment
Share on other sites

Visus exceptionus tāpat neparedzēsi, katram apstrādi neuzrakstīsi. Pārītim uzrakstīsi, bet būs neparedzēts exceptions un jāsprāgst nost gribot negribot.

 

Tad vismaz zināsi konkrēti kāpēc nosprāga, nevis vienkārši Fatal Error. Un arī neparedzēto exceptionu var noķert un apstrādāt gracefully, piemēram, kā kļūdas paziņojumu lietotājam.

Link to comment
Share on other sites

Kur problēma?

 

http://codepad.org/njb3juqT

 


function error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("error_handler");

$doc = new DOMDocument();
try {  
 $doc->loadXML('<root><sajats xml></root>');
} catch (Exception $e){
 echo "lalala";
}

 

bez error handlera: http://codepad.org/Jt7ol0ho

 

 

Lūdzu piemēru ar simplexml_load_file, demagog.

Link to comment
Share on other sites

Nebūs uz codepad, jo nevaru tur uzlikt papildus a.xml failu, bet lokāli izmet normālu exceptionu.

 


<?php
function error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("error_handler");

try {  
 simplexml_load_file("a.xml");
} catch (Exception $e){
 echo "lalala";
}

 

 

P.S.

Varu piedāvāt tik daudz: http://codepad.org/JJZCrHrv

Bet šis saistīts ar to, ka neļauj atvērt resursu, nevis xml satura kļūdu, bet tāpat skaisti izmet exceptionu.

Edited by codez
Link to comment
Share on other sites

Tad vismaz zināsi konkrēti kāpēc nosprāga, nevis vienkārši Fatal Error. Un arī neparedzēto exceptionu var noķert un apstrādāt gracefully, piemēram, kā kļūdas paziņojumu lietotājam.

Tam ir error logi :)

Man šķiet, Tu par daudz piesienies lietām, par kurām galīgi nav jāsatraucās. Tāpat tas fraktāļ džeks.

Link to comment
Share on other sites

Visus exceptionus tāpat neparedzēsi, katram apstrādi neuzrakstīsi. Pārītim uzrakstīsi, bet būs neparedzēts exceptions un jāsprāgst nost gribot negribot.

Pareizi un nepareizi. Pareizi, jo apgalvojums patiešām ir patiess - neparedzētas problēmas gadījumā jābeidz attiecīgā līmeņa process (bet ne vienmēr - visa aplikācija). Nepareizi, jo nav tādas īstas izpratnes par to, kā tas viss ir domāts. Būs grūti pārliecinātu PHP programmētāju pielauzt skatīties uz lietām savādāk. Un te ja ir tas, why PHP sux - iemetīs veselīgu, tīru galvu iekš kāda PHP ģēniju projekta, ātri vien sāks kūkot uz debesīm un sarunāties ar kaķiem. Vai kaijām. No pieredzes - PHP frontē ir augsta pašpārliecinošo visvaru un visdaru koncentrācija, kuriem nav iekšējas vēlmes pēc tādām lietām, kā problēmu abstrakcijas, sistemātiskums, standarti, dokumentācija. Jo tas viss taču ir traucēklis dinamiskajā ikdienā, kur katra diena nes jaunu uzvaru - safiksētu problēmu ar uzsetotiem parametriem, utml.

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

Nebūs uz codepad, jo nevaru tur uzlikt papildus a.xml failu, bet lokāli izmet normālu exceptionu.

 


<?php
function error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("error_handler");

try {  
 simplexml_load_file("a.xml");
} catch (Exception $e){
 echo "lalala";
}

 

 

P.S.

Varu piedāvāt tik daudz: http://codepad.org/JJZCrHrv

Bet šis saistīts ar to, ka neļauj atvērt resursu, nevis xml satura kļūdu, bet tāpat skaisti izmet exceptionu.

 

Atvainojos. Šis daļēji patiešām palīdz.

 

Līdz pilnai laimei gan pietrūkst exception klase, kas būtu atbilstoša tam error message ziņojumam, kurš stacktrace iekšā parādās. Teorētiski var mēģināt pēc tā kaut kā apstrādāt specifiskās kļūdas, lai gan tas ir čerež ž atkal.

 

Bet pats jau atzini, ka šis ir PHP mīnuss.

 

Un pēc dokumentācijas spriežot jāņem vērā, ka "It's worth noting again that no matter what you do, "E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT" will never reach your custom error handler, and therefore will not be converted into ErrorExceptions. Plan accordingly."

Edited by edgarsj
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...