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

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

  • Replies 257
  • Created
  • Last Reply

Top Posters In This Topic

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

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.

Tas ir apmēram tā pat, kā cilvēkam stāsta, ka Eiropas laukos var (varēja) aizbraukt 2 nedēļu atvaļinājumā, neaizslēdzot māju ar vērtīgām mantām iekšā, bet viņš priecīgs izsaucas "bet tam taču ir atslēga un videokamera!". Nu ja, kur gan problēma? Bet vai Tu maz esi strādājis ar "stack trace" un exceptioniem? Neviens jau nesatraucās pārāk, visdrīzāk, tos, kurus šī vide satrauc vai satrauca, var sastapt tajā "Eiropā", uz kuru tie dodas uz neatgriešanos, bet varbūt arī daļa vnk pastāsta, kā ir "tur" un "šeit".

Link to comment
Share on other sites

Tas nav apmēram tā :)

Par mani nesatraucies, es esu strādājis ar dažādām valodām, ne tikai PHP, es saprotu ap ko cepiens, taču manā skatījumā tā ir matu skaldīšana un tādēļ jau nav jādiskreditē visa valoda/tehnoloģija. Sviestus var atrast visās valodās un nevajag man te stāstīt, ka tieši PHP to ir vairāk vai mazāk. Kas ir ātrāk log(n) vai log(2*n)? :D Kur vairāk sviestu valodā ar n sviestiem vai valodā ar 2 * n sviestiem?

Pats fraktāļpacans sākumā diskailemrī iemetis - jauna nozare, paši nezinam ko daram. Gan būs labi :)

 

Prātīgu kodēšanu!

Edited by marrtins
Link to comment
Share on other sites

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.

Tā ir, bet rēali tā nav PHP kā valodas vaina, bet konrkētās bibliotēkas vaina.

Rēali nevienā projektā neesmu sastapies ar šādu problēmu, jo nav nācies XML apstrādāt.

 

P.S. Cik saprotu, citi kļūdu apstrādes mehānismi tika sākotnēji ieviesti, jo tie ir daudz ātrāki par exceptioniem. Exceptionu kontrol flows ir krietni sarežģītāks un tākā vēl ir iesaistītas klases, krietni lēnāks.

 

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

Jā, bet plusu PHP pret citām skriptu valodām manā skatījumā tik un tā ir krietni vairāk.

 

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."

Kompilācijas un pārsēšanas kļūdām tā kā exceptionu nevajadzētu izmast, bet, ja tiešām arī tās grib pārķert, tad var ar shutdown handleri.

Edited by codez
Link to comment
Share on other sites

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).

Tas ir tas gadījums, kad ir jalasa diskusiju pēc kārtas, ne viss atvert pāris ziņojumu pēc vēlēšanas. Es protams varētu iedod konkrētus linkus, bet tad tas tiks lasīts ārpus konteksta un saprasts nepareizi. Īsumā doma ir tāda - kaut gan daļā ir patiesība, tomēr lielāka daļa no problēmām ir jau atrisinātas pēdejās PHP versijās (5.3, 5.4) un daļa ir "intended by design", jo tāda ir valodas filosofija un nevisiem viņa var patikt (tā pat ne visiem patīk jūsu mīļakie Java/Python/Ruby).

P.S. Es biju sajusmā par Pascal un Borland C++ Builder :)

 

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.

Es nepretendēju uz taisnību, bet tomēr Python bija radīts ka "general use" skripta valoda un izmantošanai sistēmas programmēšanā, attiecīgi ir jabūt labai kļūdu apstrādej un Exceptions cik es saprotu ir viena no bāzēm uz kuras valoda ir projektēta. Viņš nebija domāts speciāli WEB nolūkam, un kas ir tas pats Django un citi? Tas ir FastCGI/WSGI/etc daemon. Un daemon kā mēš zinam nebeidz savu darbību pēc pieprasījuma apstrādes. Fatal kļūda nav pieļaujama, jo tad visa aplikācija krīt un jūsu WEB sistēma nestrādā.

PHP ir projektēts citādā filosofijā - viena pieprasījuma Fatal kļūda nekādā veidā neiespaido neko, izņemot tikai konkrēta pieprasījuma apstrādi. Katrai no pieejām ir savas labas un sliktas puses un viņas ir jāzin neatkarībā uz to, kurā valodā strādā. Citādi sanāk "быдлокод" kā to krieviski sauc.

 

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.

Es ne tikai zinu kā tos lietot, bet arī aktīvi lietoju. Intereses pēc izdarīju "grep 'throw new' | wc -l" uz pāris maniem projektiem, re kas sanāca: 288 reizes, 752 reizes. Bet vienālga man XML kļūdu apstrāde notiek ar libxml_use_internal_errors(true) un libxml_get_errors(), tikai pēc tam es pats izmetu Exception tur, kur man tas ir vajadzīgs ar libxml kļūdas tekstu un ierakstot log ar visiem datiem (trace ir maza daļa no informācijas).

 

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.

 

PHP 5.4 - unicode support in the core. Un viss vecais kods strādā (protams ja tas bija kārtīgi uzrakstīts, par slikta koda migrēšanu mēs nerunājam). Ja, nav tik radikāli ka Python, bet strādā. UTF-8 pēc noklusējuma.

 

Es nevienu nespiežu lietot PHP, bet kā rāda prakse - pārāk daudzi pastrādā kādu gadu, migrē uz kaut ko citu un pēc tam spļaudās pa forumiem ka PHP ir slikts. Nu ja, kad sāk prasīt kas nav tā, ļoti bieži izrādās tas, ka cilvēks provēja sataisīt kaut kādu murgu uz valodas, kurā nav tam piemerota. Tas ka priekš KDE raksta Widgets PHP un kad to ir kādi 5-6 gabali, brīnās kāpēc tie apēd tik daudz resursu. Tas, ka tiem cilvēkiem pirmkārt ir vajadzīga smadzeņu diagnostika nevienam jautājumu neizraisa - PHP IR SLIKTS!

Atkartošu - es pilnīgi saprotu kādas PHP ir problēmas un kā viņas ir jarisina, bet ir arī tādas lietas, kuras ir raksturīgas tieši PHP, tieši WEB specializācijas dēļ un tām, ka PHP nav "general purpose language". Un tām tā ir japaliek.

Daļa PHP problēmu ir fundamentālas datorzinātņu problēmas, kuras piemīt arī citām valodām - vienai vairāk, otrai mazāk, bet tās ir.

 

 

Tas gan nebija smuki. Ja dzimtā valoda nav latviešu, tad skaidrs, ka var gadīties kļūdas, it īpaši, ja raksta daudz un ātri.

Šīm gan es piekrītu. Gribētu es paskatities, ka šīs individs pus divos naktī, uz planšetdatora tumsā uzrakstīs tik lielu ziņojumu un nepieļaus nevienas kļūdas :) Grammar nazi gan jau jabūt apdomātam.

Edited by Psihius
Link to comment
Share on other sites

Par tiem erroriem, tad python`ā tāds stils http://docs.python.o....html#term-eafp nevis ifu kopums http://docs.python.o....html#term-lbyl

Izskatās, ka te dažiem trūkst pamata programmēšanas zināšanu :)

 

Nav tā kā es biju teicis? Ja nav tā kā biju teicis, tad pārlabo, ja bija, tad kāpēc kritizēt?

Ja ir savas domas un pieredze, tad ok, diskutējam. Ja sakasīts no interneta, tad netērē manu laiku. Pašam patiktu diskutēt ar Java programmētāju, kurš PHP nav nekad lietojis/redzējis un mēģinātu iestāstīt PHP nepilnības?

 

Ir cilvēki, kuri apdomāti izvēlās savu uzmanību koncentrēt uz noteiktām valodām un platformām.

Koncentrēties vai tomēr ignorēt citas valodas un citus rīkus?

Katram savs, bet es nekautrējos pētīt citas valodas un ietvarus.

Link to comment
Share on other sites

Ja ir savas domas un pieredze, tad ok, diskutējam. Ja sakasīts no interneta, tad netērē manu laiku. Pašam patiktu diskutēt ar Java programmētāju, kurš PHP nav nekad lietojis/redzējis un mēģinātu iestāstīt PHP nepilnības?

 

Es necenšos stāstīt par Python, Ruby nepilnībām, jo tās nezinu, bet stāstīju par PHP un kāpēc tas nav sliktāks par citām valodām.

Pieredze ar PHP ir, bet, lai arī būtu sakasīts no interneta, mācēt aizstāvēt savu viedokli ir jāvar, un tā nebūt vairs nav laika kavēšana.

Link to comment
Share on other sites

Koncentrēties vai tomēr ignorēt citas valodas un citus rīkus?

Katram savs, bet es nekautrējos pētīt citas valodas un ietvarus.

Man vienkārši nav laika, lai varētu normāli iedzilināties tajā pašā Python. Un man nav tādu uzdevumu, kur to varētu pielietot, kur PHP man neder - tas studenta laiks man jau ir aizmugurē kad es varēju pa 16 stundām sēdēt pie datora un mācīties. Īpaši demotivē tas faktors, ka principiāli neko jaunu es iztaisīt nevarēšu, rezultāts būs tas pats - generēts HTML ar CSS (un gribās pievienot tādu lietu, kā ar PHP 5.3 taisīt nelielas console demonizētas applikācijas nav nekādu problēmu, bet ja, jau ar 5.2 un zemāk nekas nesanāks). Varbūt man tā veicās un es strādāju tādos projektos, kur ir attiecoši profesionaļi, kas taisa savu darba gabalu un tāpēc no manis prasa uzbūvēt arhitekturu, izvēlēties risinājumus ko izmantosim un ja mums vajag kaut ko ārpus PHP+MySQL servera pusē - to dara cilvēks ar attiecošās jomas pieredzi. Man nav nekāsu problēmu ar to, ka es nestrādāju ar to pašu Python - es tā un saku - mums ir vajadzīgs Python programmētājs. Man bez tā parasti darba saplānots uz pāris mēnešiem uzpriekšu.

 

Var būt arī cits iemesls, kāpēc mani nevelk mācīties vel kādu valodu - man praktiski nav garlaicīgo šablonu projektu. Man nav jameklē kādu papildus programmēšanas hobbiju, lai izpaust manu iekšejo "es" - man to izdodās izpaust ikdienas darbā. Es arī pētu Yii framework un esmu uzrakstījis pāris patch, kuri tika pielietoti. Nu un daži droši vien zin, ka es ik pa laikam nodarbojos ar visādu event organizāciju (tas pats Webconf). Te nesen bija devclub pirmajs sanākums - tur mums bija interesanta diskusija par CoffieScript (bija prezentācija par to) - pats prezentācijas autors atbildēja uz jautājumu "Kāpēc to izmantot?" ka to izmantot nevajag. Vinš pats to izmanto tāpēc, ka viņš ir izvirtulis un tas dod viņam to estetisko baudu, kuras viņam pietrūks ikdienas darbā. Uz ko paziņa pateica, ka viņš mājās nodarbojās ar Python tieši tā paša iemesla dēļ (darba to neizmanto). Man pietiek ar Yii un tiem uzdevumiem, kas man ir (man ir laiks taisīt pareizi un skaisti, jo kvalitāte ir pirmā vietā, koda rakstīšanas ātrums nav no galveniem kritērijiem).

Gribu mācītīes man izraisa trīs lietas: Mono (C#), mobīlās aplikācijas (naitive variants), es gribu iegūt maģistra diplomu.

Link to comment
Share on other sites

Man vienkārši nav laika, lai varētu normāli iedzilināties tajā pašā Python.

Lai šeit drukātu komentārus arī vajag laiku :)

Vēl man patīk web aplikāciju čats, kur katru dienu notiek aktīvas sarunas, bet nevienam nav laika.

Par laiku var stāstīt savam Bosam, bet nemelojiet sev. Nerunāju par tevi (vai kādu citu) konkrēti, katram ir sava attieksme un situācija.

 

Un man nav tādu uzdevumu, kur to varētu pielietot, kur PHP man neder - tas studenta laiks man jau ir aizmugurē kad es varēju pa 16 stundām sēdēt pie datora un mācīties.

Diemžēl, ja esi izvēlējies profesiju programmētājs, tad par studentu esi palicis uz visu karjeras laiku.

Viens mācās stundu dienā, cits vienu dienu mēnesī. Kāds biežāk, kāds retāk, bet tas ir neizbēgami, savādāk paliksi aiz muguras pārējiem.

 

Te nesen bija devclub pirmajs sanākums - tur mums bija interesanta diskusija par CoffieScript (bija prezentācija par to) - pats prezentācijas autors atbildēja uz jautājumu "Kāpēc to izmantot?" ka to izmantot nevajag. Vinš pats to izmanto tāpēc, ka viņš ir izvirtulis un tas dod viņam to estetisko baudu, kuras viņam pietrūks ikdienas darbā.

Tas cilvēks ļoti labi pamatoja un argumentēja coffescript lietošanu, nosaucot vismaz 10+ priekšrocības. Ņemot vērā, ka šo "valodu" var iemācīties pa 30min un pierast pa pāris dienām.

Ja viņš lieto kā izvirtulis, tad pats pie tā ir vainīgs, coffee jau ir pietiekoši populārs, lai to nevarētu tā vienkārši ignorēt https://github.com/l...es/CoffeeScript

Edited by nemec
Link to comment
Share on other sites

Ziniet kas man besī? Tas, ka cilvēki ir pieņēmuši, ka ir viens vienīgs pareizais ceļš... un citu, neko jaunu, mēģināt negrib. Es biju laimīgs ar Windows (pirms kādiem diviem gadiem), līdz pamēģināju darboties ar Linux. Un tā pamēģināšana nav diena vai divas. Neesmu lietojis Apple'a OS X, tāpēc arī neko nespriežu. Savukārt citi, pat nepamēģinot — kliedz, ka viss ir sūds, un, ka viss neitīvi suxo! Es ļoti labi tieku galā ar JavaScript, bet es tagad nebļauju, ka CoffeScript ir sūds un suxo, jo neesmu to mēģinājis. Un kas vēl ir svarīgi — es to, ar laiku, pamēģināšu... es neesmu iestrēdzis un es joprojām raujos «uz augšu»! Šie visi ir tūļi, lai padarītu mūsu galveno uzdevumu, t.i., programmēšanu, vienkāršāku, ērtāku & ātrāku. Kāpēc nedot iespēju jauniem tūļiem? Nu jūs nevarat zināt, vai tie nepārspēs vecos... kur nu vēl bļauj kko par tiem! Varbūt tie nepārspēs vecos, ok... bet, iespējams, papildinās gan. Beigu beigās — tā visa ir tīrākā pieredze. Ja tas nav saprotams, turpiniet vien darīt kā darat... neko jau tur padarīt nevar.

 

P.S. «Don't Fall in Love With Your Technology.»

Link to comment
Share on other sites

Palasot šo farsu rodas priekštats ka daGrevis cenšas pateikt vienkāršu lietu ka pamēģinat ko jaunu ekspermentējat un protams attīstaties bet neskatoties uz to visu domaju katrams ir savs un forsēt šadi nau laba doma manas domas daGrevis pelna no manis vienu zvaigzni :) nekā persnonīga nepatik man tīņi ar lielu muti un kuri vienkārši tērē laiku citiem un MAN ...

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