Gå til innhold

Hva er galt med PHP?


Anbefalte innlegg

Jeg har sett møkkakode i alle språk, betyr det at de språkene suger? Høres jo nesten ut som at du bare har bestemt deg for at PHP suger, da er det jo ikke vits å prøve å overtale deg om noe annet en gang ;)

Sånn sett er det jo umulig å kalle noe programmeringspråk bedre eller dårligere enn noe annet, så lenge de grunnleggende "nut and bolts" er tilstedet kan man jo lage akkurat det man vil...

 

A well-known saying in the programming racket is that a good Fortran programmer can write Fortran programs in any language. The sad truth, though, is that Fortran programmers write Fortran programs in any language whether they mean to or not.

 

Gir du et PHP rammeverk til en dreven Java-utvikler vil han begynne med å sette opp Frontcontroller og routing funksjonaliteten, og lage en "Java-løsning" i PHP. Gir du et Java rammeverk til en dreven PHP-utvikler vil han sannsynligvis begynne med en tom .jsp og si <% out.println(...); %> på første linje og lage en "PHP-løsning" i Java.

 

Etter min mening er hvilke paradigmer og mønstre som ligger til grunn i språket og grunnlegende API langt viktigere faktor for hvor bra eller dårlig det er, og hva det egner seg for, enn hvilke språktekniske mekanismer som er tilgjengelig.

 

Bare å lage det, ingenting hindrer deg ;)

Får litt minner om java-metoden å lese fra fil på, overengineered herfra til månen (med å måtte gå innom 3 objekter for å få data)

Joda, PHP er Touring-komplett, så det er alltid teoretisk mulig å lage det som mangler...

 

Scanner input = new Scanner(new File("text.txt"));

string firstLine = input.next();

 

Synes det er en relativt lav pris å betale for å faktisk få et 100% generalisert I/O-rammeverk out-of-the-box. Om man snakker om cowboy-koding så er vel det å binde koden opp mot noe på filsystemet uten mulighet for å injisere noe annet et godt eksempel på det.

Lenke til kommentar
Videoannonse
Annonse

Bare å lage det, ingenting hindrer deg ;)

Får litt minner om java-metoden å lese fra fil på, overengineered herfra til månen (med å måtte gå innom 3 objekter for å få data)

 

Du misforstår heilt, mens Java har fleksibilitet når det kjem til fillesing så er det langt enklare i f,eks Python. At PHP enda bruker globale funksjoner viser at språket er på heilt feil spor. Globale variabler og funksjoner er eit helvete i store prosjekter.

 

Desverre bare støttet i Linux ja.

Det er ikkje tråder, det er ein hack for å starte prosesser med å benytte seg av OS kommandoer. Deling av data er ikkje mogleg(utenom om du hacker det til med å bruke shared memory moduler i PHP som ikkje er stabilt).

Dessuten går du glipp av all moroa med deadlocks og race conditions :)

 

Gjelder samtlige språk/systemer uansett det. Er det dårlig planlagt fra start av og cowboykodet går det i dass.

Det gjelder spesielt PHP då det er det språket med dei fleste unge utviklerar som bruker det som sitt første programmeringsspråk.

 

Dessuten så er det altfor mange spesialtegn i PHP som gjer lesbarheita mykje tyngre enn det er i f.eks Python. Python kode er vell og i snitt 50% meir kompakt enn PHP kode.

 

Grunnen til at du(og dei fleste andre) liker PHP er vell fordi du bare har prøvd Java, og har blitt skremt vekk av alle XML'er og diverse vanskelege/komplekse kodesnutter for ting som burde vere trivielle. Ja filbehandling er tungvindt i Java. Er jo derfor eg bruker Groovy til den biten ;)

Lenke til kommentar

PHP er enkelt å jobbe med men krever disiplinerte utviklere. Jeg synes det er utfordrene å holde på med PHP av den grunn. Det er ikke nødvendigvis en "feil" egenskap med språket.

Jo det er det, det koste å ha disiplinerte utviklarar. Men det er ikkje alt, PHP utviklarar er også dei verste når det kjem til å finna opp hjulet på nytt. Kor mange forskjellige ORM implementasjonar finner ein til PHP? Kor mange lager sin eigen applikasjonsstruktur istadenfor å følgje normer som er i andre språk?

 

Å setja seg inn i arbeidet gjort av ein tidlegare PHP utviklar er tidskrevandes og tida går mykje i å lese kode og skrike WTF tusenvis av gonger! Når du snakker med ein PHP utviklar om MVC arkitektur så har han som regel totalt misforstått. Modellen er database spørringer, kontrolleren er klassen med metoder og viewet er der du blander applikasjonslogikk og html.

Lenke til kommentar

Det er opp til utvikleren om h*n bruker ett rammeverk eller finner opp hjulet på nytt. Erfaringen til utvikleren skinner rett gjennom om han skriver dårlig kode. Det er det som er utfordrende for meg når jeg utvikler, koden kan alltid bli bedre, mer strukturert. Min kvalitet som utvikler er veldig eksponert i PHP.

 

Jeg tror du (sIDDIs) er litt forutinntatt om at det bare finnes en riktig måte å gjøre ting på. Drupal er ett eksempel på CMS-rammeverk som er skrevet i prosedyrebasert struktur i PHP. Det er nok eksempler på at Drupal fungerer, er modulærbart og tåler høy trafikk så det holder. En god Drupal utvikler kan lage "hva som helst" uten å skjønne noe om MVC.

 

Men for all del, jo flere PHP utviklere som tar ibruk etablerte rammeverk, jo flere blir eksponert for utbredte måter å strukturere ting på. ++Det vil være en god ting++ :thumbup:

Lenke til kommentar

Du misforstår, dei fleste PHP utviklerar ignorerer gode standarder for applikasjonutvikling. Og det er bare i PHP eg ser det, så og si aldri i Python/Java/Ruby/C#/Perl.

 

Og dette er ikkje kode produsert av studenter/nybegynnere, dette er kode som det blir betalt for.

 

Drupal er kanskje stort og populært, men fy faen for eit rot det er.

Nå åpnet eg nettopp ein random fil som heiter comment.pages.inc for å dra fram nokre eksempler.

 

Global funksjon

function comment_edit($cid)

 

Kall på global funksjon? Må vell bruke grep for å finne ut kor denne er og kva den gjør.

else {
   drupal_access_denied();
 }

 

Er det ikkje støtte for språk i Drupal? Og det kallar seg verdas ledande CMS?

drupal_set_message(t('You are not authorized to post comments.'), 'error');

 

Det var 3 kjappe WTF!

 

Om ein skal sjå på skikkelege CMS plattformer til PHP så bør ein i allefall kikke på MidCOM bygd med Midgard.

Endret av siDDIs
Lenke til kommentar

Standardspråket er engelsk i Drupal, alt innen t() funksjonen kan oversettes i GUI eller med ferdig språkfilimport. Det er rotete for deg fordi du ikke er vant med hvordan Drupal er å programmere i. Man må nullstille seg litt i begynnelsen, men Drupal sin måte å gjøre ting på fungerer bra.

 

2 gode råd om du er genuint interessert.

Aldri rør kodebasen til Drupal - skriv moduler.

Plukk opp en kopi av Pro Drupal Development (John VanDyk og Matt Westgate).

Endret av tickinghd
Lenke til kommentar

Kodebasen jeg er ansatt for å vedlikeholde er hverken suveren eller umulig å jobbe med. Jeg har vanskeligheter med å tro at situasjonen min er i en særstilling sammenlignet med utviklere som jobber med andre programmeringsspråk.

 

Den her tråden har ikke klart å gi noe avgjørende svar på hva som er galt med PHP.

Kan vi ikke bare være enige om at alle språk suger, mens de populære språkene suger mest?

 

:shrug:

Lenke til kommentar

sIDDIs, for meg virker det som at du tror Python/Plone eller Groovy er løsningen på alt. "Ingen" kaster gammel kode for å skrive i språket du foretrekker uansett hvor bra det måtte være. Din harde bedømming om Drupal var temmelig tilfeldig og bastant. Kanskje vet du noe om kodebasen jeg jobber på også, er den dårligere enn hva den andre jobber med uten at du har sett den? Om du har jobbet med flere språk og har riktig erfaring til å mene noe (ja jeg har bare jobbet med PHP profesjonelt) så har du brukt opp den integriteten du hadde for min del.

 

Du står fritt til å mene hva du vil. Det kan jeg også. Jeg tror jeg har fått svar på det jeg startet tråden med. Folk er bare sytete. :)

Endret av tickinghd
Lenke til kommentar

PHP implementasjonen er drittreg, PHP er et bedritent språk som er temmelig primitivt i forhold til andre. PHP støtter ikke lambdauttrykk (til tross for at søk på det viser sider der folk tror at anonyme funksjoner og lambda-uttrykk er det samme)

Det var ikke laget objektorientert i utgangspunktet, noe som fører til at 0% av standardbibkioteket er objektorientert. Namespaces mangler som gjør at alle funksjoner havner i en herlig suppe. Oppførselen for meg er til tider mystisk, blant annet ved "$a$b" = $a . $b og ved at den faktisk tillater bruk av uinitialiserte variabler. Det er ingen forskjell på false og en uinitialisert verdi uten å bruke et kall for å sjekke det først. Ved siden av å være helt vanvittig, fører det også til flere feil i koden, og til et ekstra kall som er unyttig i andre språk: isset().

Selv om det er et scriptspråk, går det fint an å kreve at variabler deklareres og initialiseres. Hvorfor de har droppet det i PHP når alle andre synes det er en god idé er et mysterium.

strpos returnerer false dersom den ikke finner en string... noe som også er det samme som 0, altså første karakter i stringen.

Hvorfor ikke returnere en ugyldig verdi, som -1? ANER IKKE.

Lenke til kommentar

Jeg tror jeg har fått svar på det jeg startet tråden med. Folk er bare sytete. :)

 

Syting er ein vesentleg del av systemutvikling. Det viser at du stiller deg kritisk til valg av teknologi og har sterkt fokus på valg av riktig verktøy. Eg jobber i ein 95% Linux bedrift, men me har ingen problemer med å bruke .Net eller MS-Sql Server.

Lenke til kommentar

At uinitialisert/null evaluerer til false har det til felles med Javascript. Det er forsåvidt noe av arven fra Perl. PHP var jo laget direkte erstatning for cgi+Perl av Perl kodere. Der har man såvidt jeg husker ikke eksplisitt boolean type (og ingen true/false keywords), men 0/tom array/uinitialisert oppfører seg som false i kondisjonelle uttrykk. Perl var aldri ment som et fundament for programmer av noe særlig omfang.

 

(JS, i motsetning til Perl og PHP krever dog at man deklarer variable med eget keyword, slik at man får feilmelding og ikke "false" om noen f.eks staver en variabel feil eller refererer feil scope da...)

 

Javascript opplever jeg på mange måter som et mer robust språk enn PHP :/

Lenke til kommentar

[..snip..]

Hehe. Prototype-basert programmering i javascript er å fortrekke over PHP? Jeg har lyst å stikke en gaffel i øyet bare med tanken (ikke bokstavelig da, javascript er vanskelig å komme utenom). Ta i bruk trippel-likhetstegn (===) i php så sjekkes også typen i kondisjonelle uttrykk.

Endret av tickinghd
Lenke til kommentar

Syting er ein vesentleg del av systemutvikling. Det viser at du stiller deg kritisk til valg av teknologi og har sterkt fokus på valg av riktig verktøy. Eg jobber i ein 95% Linux bedrift, men me har ingen problemer med å bruke .Net eller MS-Sql Server.

Valg av teknologi basert på preferansene til utvikleren er ikke vanlig, heldigvis. Man må ta i betraktning at andre må vedlikeholde koden når utvikleren slutter. Sånnsett vil Plone være ett dårligere valg enn Drupal. Det er bedre tilgang på webutviklere med PHP-erfaring enn webutviklere med Python-erfaring. Det er cowboy-taktikk å kaste gammel kode for å skrive i ett annet språk i den tro at ting blir bedre. Det vil ikke skje i min bedrift uten videre.

 

(Og det sies at det ikke er noe problem å få tak i solide PHP-utviklere til lønnen av en gjennomsnittlig .NET eller Java-programmerer.)

Endret av tickinghd
Lenke til kommentar

Valg av teknologi skjer basert på analysering frå fleire utviklarar. Når me får eit prosjekt så vil me løyse det optimalt. Ein blanding av Java/Groovy/Python/Perl/Erlang er ikkje uvanleg her. Ein oppegåande utvikler vil sjå med ein gong kva me trenger alle dei verktøya til. Dei er unike på kvart sitt område. Å bare utvikle i eit språk låser deg inne i ein boble der du må knote, snu ting opp ned og knote meir for at bobla ikkje skal sprekke.

 

I Noreg så er det vanskelegare å få tak i Plone utviklerar enn Drupal, men på verdensbasis så er det enklare å få tak i Plone utviklarar. Tilgangen til Python utviklarar er derimot god, spesielt på GODE utviklarar som kan litt meir enn bare Python. Her i Noreg er tilgangen på PHP utviklarar god, men dei kan jo bare PHP.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...