Gå til innhold

Hva er galt med PHP?


Anbefalte innlegg

Istede for å ødelegge den opprinnelige tråden, oppretter jeg istedet en ny tråd. :)

 

Siste post:

 

Ja for det er jævlig få som bruker og klager over f.eks Python.

 

PHP har så mange mangler at det aldri vil vere meir enn eit hobbyverktøy for hobbyutviklere.

Einaste grunnane til at PHP er populært er at det er lett å lære seg og at mange store prosjekter bruker det til å lage populære vevstadar(som automatisk betyr at då er teknologien bak bra).

 

Facebook er jo eit kjempeeksempel på kor feil valg av verktøy dei har valgt.

 

Så hva er galt med PHP?

 

PHP er i bruk "overalt" og er derfor ikke bare for hobbyutviklere. Det er mange jobbmuligheter i store og små bedrifter (flere muligheter åpner seg om man har utdannelse eller lang erfaring som overalt ellers i IT-bransjen).

Utviklere kan velge å skrive spagettikode eller følge MVC-struktur eller velge å gjøre noe helt annet.

Utviklere kan velge å skrive alt fra bunnen av eller basere seg på ett rammeverk (Zend, Symfony, CodeIgniter..).

Utviklere kan bruke testverktøy som phpunit (i javaverdenen bruker man junit).

PHP fungerer bra på kommandolinjen og i cron-skript.

Man kan skrive egne utvidelser i C/C++ om man har spesielle behov som ikke finnes i tilgjengelige utvidelser.

Tid brukt fra idé til nettleser er veldig kort "apt-get install .." -> "<?php echo 'hello world'; ".

Mange vanlige og godt dokumenterte triks for å øke ytelse; kompilere php skript til nær maskinkode, mellomlagring, proxy, osv.

 

PHP mangler eleganse, men jeg føler samtidig ikke at PHP står iveien for meg som utvikler. Så da lurer jeg på hvorfor så mange andre utviklere er så negative til PHP. Blir webprogrammene bedre om man f.eks. bruker .net eller java? Hva er greia? :ph34r:

Lenke til kommentar
Videoannonse
Annonse

Tja, PHP lar deg gjøre alt, med de fordeler og ulemper det medfører.

 

Har man litt kuskus på seg selv fungerer PHP helt greit.

 

I jobbsammenheng har jeg brukt Java, Perl, PHP, ROR og sikkert noe annet og. Men jeg føler meg personlig mest komfortabel med PHP. (Til tross for sine merkverdigheter )

 

 

PHP fungerer godt nok, så jeg har null problem med å ta det i bruk i jobbsammenheng. (Noe jeg forsåvidt har gjort en del ganger de siste 8 årene.)

 

Folket får klage så mye de vil, det endrer ikke på det faktum at det er utbredt i bedrifssammenheng. Merkelig nok må ikke alt overengineeres med ørten lag gjennom ørten enterprise løsninger (etc). ;)

Lenke til kommentar

php er seff alltid riktig til sitt bruk, hva nå man måtte mene det er. men jeg synes det er litt stusselig å bruke «ting» som er kommet skeivt ut fra start og må bruke ørten versjoner for å komme på track, som php som får objektorienteringa klatta på underveis, og mysql som henger etter de andre på ymse måter... det at noe er utbredt er ikke alltid et tegn på at noe er bra.

Endret av quantum
Lenke til kommentar

Annet enn at det ikke framtvinger objektorientering (det var jo ikke et objektorientert språk) og at det ikke er kompilert og derfor er litt tregere. Er det noe konkret å sette fingrene på som er direkte galt i PHP?

 

Jeg har sett mye elendig kode i Java også..

Lenke til kommentar

Man må forstå hvilke problemer PHP forsøker å løse.

 

Webprogrammering handler først og fremst om å ta i mot data (get/post), prosessere, returnere html tilbake. Dette skjer på en stateless protokoll, uten typed data, og det må skje kjapt. Det er nettopp dette PHP er laget for, og det gjør det uten for mye kompleksitet.

 

En av de største cms'ene, Drupal, er skrevet i en prosedyrebasert struktur (PHP) - og det er nok eksempler på at Drupal håndterer høyt trafikkerte sider.

 

Jeg er enig i at det er forvirrende å forholde seg til så mange metoder å kode PHP på. :hmm:

Lenke til kommentar

Skal vi se.. Et par ting som gjør at jeg ikke liker PHP:

 

1. Inkonsistens i funksjoner.

Returnerer denne en ny variabel? Endrer den eksisterende?

Printer den resultat, om man ikke gir den beskjed om å lagre i en variabel?

Hvilken rekkefølge skal parmeterne til funksjonen ha?

Rådata først, eller endringsdata først?

 

2. Lett å skrive usikker / feil kode

mysql_escape_string() og mysql_real_escape_string()

u-initierte variabler er leses som false istedet for å gi error

 

Ting der kan jobbes rundt (stored procedures, kan slå på strict variabler osv),

men det krever at folk vet om det, og burde egentlig være unødvendig.

 

3. Mangel på namespaces. Som standard er alle funksjoner i samme namespace, og det gjør

(etter min mening) ting ganske rotete, og bidrar enda mer til punkt 1.

 

4. Mange dårlige utviklere der, og som resultat så er mye av eksempel / tutorial

koden der ute helt hårreisende dårlig. Som igjen skaper enda flere dårlige utviklere.

 

 

Det er det jeg kommer på i øyeblikket, kan hende jeg slenger på noen flere senere.

Endret av Terrasque
Lenke til kommentar

Ingenting galt med det, jeg mener det er perfekt for webutvikling. Enkelte skriver dårlig kode men det er mer pga det er så fleksibelt spør du meg.

 

1. Det er gratis

2. Gratis IDE

3. Største communitiet rundt det, er tonnevis av ressurser.

4. Funker mot andre språk ganske enkelt

5. Bra databasestøtte med MySQL, MSSQL & Postgresql

6. Plattform uavhengig

Lenke til kommentar

Skal vi se.. Et par ting som gjør at jeg ikke liker PHP:

 

1. Inkonsistens i funksjoner.

Returnerer denne en ny variabel? Endrer den eksisterende?

Printer den resultat, om man ikke gir den beskjed om å lagre i en variabel?

Hvilken rekkefølge skal parmeterne til funksjonen ha?

Rådata først, eller endringsdata først?

Godt poeng.

 

2. Lett å skrive usikker / feil kode

mysql_escape_string() og mysql_real_escape_string()

u-initierte variabler er leses som false istedet for å gi error

 

Ting der kan jobbes rundt (stored procedures, kan slå på strict variabler osv),

men det krever at folk vet om det, og burde egentlig være unødvendig.

mysql_escape_string: Til forsvar til PHP utgår denne fra framtidige versjoner av PHP.

 

u-initierte variabler: Man bruker isset() om man forventer at en variabel eksisterer. Ikke noen stor sak egentlig, med mindre man skriver naiv kode hvor man ikke tar slike ting i betraktning.

 

3. Mangel på namespaces. Som standard er alle funksjoner i samme namespace, og det gjør

(etter min mening) ting ganske rotete, og bidrar enda mer til punkt 1.

Har ennå tilgode å oppleve situasjoner der jeg har savnet namespaces spesielt (bank i bordet (eller ikke mange nok år som utvikler?)).

 

Til forsvar for PHP kommer dette i versjon 6, og f.eks. Objective C skal heller ikke ha dette.

Men dette er en reel mangel i PHP mange er opptatt av.

 

4. Mange dårlige utviklere der, og som resultat så er mye av eksempel / tutorial

koden der ute helt hårreisende dårlig. Som igjen skaper enda flere dårlige utviklere.

Ikke bare er det, eksemplene i PHP-bøkene er ikke helt "best practice" heller.

 

 

Men samtidig, PHP og miljøet rundt endrer seg veldig raskt.

 

 

Det er det jeg kommer på i øyeblikket, kan hende jeg slenger på noen flere senere.

 

Bra. Props for interessant innlegg.

Lenke til kommentar

 

u-initierte variabler: Man bruker isset() om man forventer at en variabel eksisterer. Ikke noen stor sak egentlig, med mindre man skriver naiv kode hvor man ikke tar slike ting i betraktning.

De aller fleste implementasjoner av andre språk ser på det som en alvorlig feil, og vil ikke kompilere eller kjøre dersom programmer bruke en uinitialisert variabel.

Hva skjer i PHP dersom du staver feil på en variabel? Den klager hverken dersom du prøver å lese eller skrive til den, det bare surrer videre.

 

Det som også er irriterende er hvordan man kan legge variabler inne i strings. Hva er poenget med .? Og hvorfor i svarte svingende brukes PUNKTUM til dette? Hvorfor ikke + eller & som i andre språk? Bare for å være annerledes?

 

Og er det noen PHP versjoner som har støtte for unicode? Jeg hadde masse problemer med tegnsett og BOM på PHP når jeg jobbet med det.

Lenke til kommentar

 

u-initierte variabler: Man bruker isset() om man forventer at en variabel eksisterer. Ikke noen stor sak egentlig, med mindre man skriver naiv kode hvor man ikke tar slike ting i betraktning.

De aller fleste implementasjoner av andre språk ser på det som en alvorlig feil, og vil ikke kompilere eller kjøre dersom programmer bruke en uinitialisert variabel.

Hva skjer i PHP dersom du staver feil på en variabel? Den klager hverken dersom du prøver å lese eller skrive til den, det bare surrer videre.

PHP er "loosely typed", dvs. at PHP håndterer tilegning av variablene for deg. Jeg ser ikke helt hvorfor det ene er mer riktig enn det andre.

 

Det som også er irriterende er hvordan man kan legge variabler inne i strings. Hva er poenget med .? Og hvorfor i svarte svingende brukes PUNKTUM til dette? Hvorfor ikke + eller & som i andre språk? Bare for å være annerledes?

Jepp, PHP liker å være annerledes. :)

 

Kan ikke si meg enig i at PHP gjør noe galt på dette punktet. I Python må man f.eks. bruke + og str() på alt, det er ikke bedre.

 

Og er det noen PHP versjoner som har støtte for unicode? Jeg hadde masse problemer med tegnsett og BOM på PHP når jeg jobbet med det.

Det er sant, det burde vært bedre støtte for UTF-8 i dag. Dette er noe som vil løse seg over tid om ikke annet.

Endret av tickinghd
Lenke til kommentar

Det som også er irriterende er hvordan man kan legge variabler inne i strings. Hva er poenget med .? Og hvorfor i svarte svingende brukes PUNKTUM til dette? Hvorfor ikke + eller & som i andre språk? Bare for å være annerledes?

At man velger noe annet enn + for konkatenering av strenger er nå pga. følgende:

 

$a = 100;
$b = 24;
echo ($a + $b);  // 124
echo ($a . $b);  // 10024

En direkte konsekvens av at en ikke har sterk typing av variable. :)

 

Selv liker jeg for øvrig PHP godt, men jeg har samtidig ikke noen problemer med å se at PHP gir utvikleren forferdelig mange muligheter til å gjøre feil.

Lenke til kommentar

PHP er "loosely typed", dvs. at PHP håndterer tilegning av variablene for deg. Jeg ser ikke helt hvorfor det ene er mer riktig enn det andre.

PHP er "loosely typed", og i denne sammenhengen betyr det implisitt konverterer mellom typer. Det at en ubundet variabel evaluerer til en verdi, har ingen ting med typingen å gjøre.

Lenke til kommentar

PHP er "loosely typed", dvs. at PHP håndterer tilegning av variablene for deg. Jeg ser ikke helt hvorfor det ene er mer riktig enn det andre.

PHP er "loosely typed", og i denne sammenhengen betyr det implisitt konverterer mellom typer. Det at en ubundet variabel evaluerer til en verdi, har ingen ting med typingen å gjøre.

Ja, det høres mer riktig ut.

 

Men jeg ser fortsatt ikke helt hvorfor det ene er mer riktig enn det andre, hvorfor PHP er "feil" for å være loosely typed og for at uinitialiserte variabler egentlig ikke er uinitialiserte. :)

 

Typede språk synes å kreve mye mer tastaturboksing, og lekker mer informasjon i nettleseren når noe ikke fungerer som forventet.

Lenke til kommentar

Kan ikke nødvendig vis se noe feil med svak typing i det generelle tilfellet, men har ikke noe erfaring med PHP, så har ingen tanker rundt det.

 

Derimot så lurer jeg på om du har noen eksempler på hvilke fordeler man får av at variabler som ikke er bundet evaluerer til false?

 

Det eneste jeg kan se, er dersom man trenger en variabel som er false som standard, så slipper man å innføre den selv. Men er dette ene tilfellet så viktig at du vil gi opp muligheten for å systemet hjelper deg når du refererer til variabler som ikke eksisterer?

Lenke til kommentar

Det verste med PHP er den konstante echo og print "<div id=\"main\">test</div>"; som 9 av 10 php utviklerar gjer.

 

PHP handler konstant om refaktorering og rydding av møkkakode. Ofte når eg får eit PHP prosjekt mellom henda så handler det om å rydde i globale funksjoner og variabler, overbelasta session objekter, referanser som er brukt på kryss og tvers og ikkje minst skille mellom visningslogikk og applikasjonslogikk.

 

Andre ting PHP mangler er unicode støtte, objektorientert filbehandling, støtte for tråder, har ikkje if -> else -> finally og operator overloading. Det er også mange rare quirks i PHP som f.eks array[1] og array['1'] refererer til same verdi. At PHP ikkje er sterkt typet gjer det vanskeleg å vedlikehalde etterkvart som prosjektet vekser til.

 

Eg foretrekker Python eller Groovy mykje meir.

 

Python grunnet:

Sterkt typet.

Unicode støtte.

Veldig lettleslig utan haugevis med spesialteikn.

Python kode er som regel ein god del kortare enn tilsvarande PHP kode.

Python er ikkje bare kjappare å utvikle i, men eksekverer også kjappare.

Python er svært effektiv til fleire ting enn bare web. Det duger også til shellscripting, gui, spelutvikling.

 

Groovy grunnet:

Full kompatibilitet med Java.

Kan velje mellom statiske og dynamiske variabler når som helst i koden.

Sterkt typet.

Unicode støtte.

Fantastisk dato/tid implementering. 4 dager fremover er så lett som new Date() + 4.day

Elvis operatoren

Elegant markup builder.

 

PHP har heller ingenting som kan måle seg med Hibernate, Lucene og Shiro/Spring Security. Halvferdige implementasjoner teller ikkje, akkurat som MySQL som er ein halvveis databaseimplementasjon.

 

At så og si alle PHP utviklerar velje MySQL framover SQLite skjønner eg ikkje, ijallefall når så og si alle PHP utviklerar meiner ytelse er viktig(SQLite er faktisk full ACID med sin superytelse). Greit nok at SQLite ikkje er så bra til mange samtidige transaksjoner, då har ein jo den blå elefanten. Men dei fleste som lager nettsider med PHP bør jo kunne greie seg vanvittig mykje betre med SQLite?

Lenke til kommentar

Kan ikke nødvendig vis se noe feil med svak typing i det generelle tilfellet, men har ikke noe erfaring med PHP, så har ingen tanker rundt det.

 

Derimot så lurer jeg på om du har noen eksempler på hvilke fordeler man får av at variabler som ikke er bundet evaluerer til false?

 

Det eneste jeg kan se, er dersom man trenger en variabel som er false som standard, så slipper man å innføre den selv. Men er dette ene tilfellet så viktig at du vil gi opp muligheten for å systemet hjelper deg når du refererer til variabler som ikke eksisterer?

 

I PHP blir den uinitialiserte variabelen automatisk tildelt type NULL.

 

Eksempel:

$uinitialisert; // NULL

 

Skriver man en uinitialisert variabel i Python kastes ett unntak. Er vel kanskje det samme i Java og C#?

 

uinitialisert # kaster unntak.

 

Personlig er jeg ikke bevisst på denne problemstillingen når jeg programmerer, kommer dermed ikke på noe bra eksempel utover at det ikke går utover arbeidsflyten min. (Om noen andre har eksempler, kom gjerne med dem.)

 

Det føles naturlig å initialisere variablene med en verdi uansett så vet man hva man kan forvente. Variabelen kan jo f.eks. være opprettet ett annet sted i koden og er da ikke nødvendigvis NULL. Tar man ibruk en variabel som kan være uinitialisert er det helt normalt å bruke if (isset($variabel)) {} - kort og greit.

Lenke til kommentar

Det verste med PHP er den konstante echo og print "<div id=\"main\">test</div>"; som 9 av 10 php utviklerar gjer.

 

PHP handler konstant om refaktorering og rydding av møkkakode.

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

 

Men men, alle har sin smak, min er fortsatt PHP :)

 

Noen merknader:

objektorientert filbehandling

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)

 

, støtte for tråder

Desverre bare støttet i Linux ja.

 

som f.eks array[1] og array['1'] refererer til same verdi.

Usikker på problemet med det, det kommer jo inn under det med at det ikke er typesterkt.

 

At PHP ikkje er sterkt typet gjer det vanskeleg å vedlikehalde etterkvart som prosjektet vekser til.

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

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