Visa ett inlägg
Oläst 2009-11-09, 18:27 #78
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
Jo - diskussionen pendlar tyvärr mellan språk, ramverk och tillverkare. Så det blir en lite rörig diskussion. Sedan blir det också lite stökigt när de inblandades erfarenheter skiljer sig så starkt åt...

Så för att kommentera enbart PHP som språk. PHP har utvecklats av många starka personligheter med spretande viljor. Det har tyvärr gjort att språket släpar på en hel del bagage idag. Som exempel tyngs syntaxen av en hel del inkonsistens - både vad gäller namngivning, parameterordning och överlappande funktionalitet.

Så det är sant att PHP inte utvecklats under samma organiserade form som t ex Java, C++ eller C#. (Dock bör man nog komma ihåg att både C++ och Java i perioder haft stora inkonsistenser mellan olika versioner och tilllverkares kompilatorer etc.)

Men vad jag tror många missat är att PHP har utvecklats en hel del. Det finns bagage kvar som många seriöas PHP-programmerare önskar bort. Men det är naturligtvis inte så lätt. Så de flesta professionella programmerare följer ett antal best praxis, liksom programmerare i många andra språk gör. Exempel dyker ofta upp på mysql_query (se ovan). Vilket nog ganska få använder i "professionella" sammanhang - hoppas jag. Det stadiet är liksom passerat. Samma gäller för mycket annat som finns kvar i språket. PHP6 har varit på gång under många år. Mycket har flyttats till 5.3 men en del upprensning av sådant som varit flaggat som utdaterat kommer försvinna först med PHP 6.

Mer och mer av PHP:s grundfunktionalitet tillhandahålls via klasser och objekt. Det är ganska länge sedan PHP var ett renodlat procedurellt språk. Också nuvarande PHP version 5 är många år gammal och den ihophackade objektorientering som fanns i PHP 4 är utdaterad sedan länge. Dagens objektorienterade PHP har sina egenheter men har ändå stöd för namespaces, interfaces, abstrakta klasser och allt annat man förväntar sig av ett objektorienterat språk. Man kan sakna en del. Exempelvis flera konstruktorer i en klass beroende på typ och "finally" vid exception-hantering. Objektorienteringspuritaner hittar naturligtvis alltid saker att irritera sig på. De hackar ju dock friskt på C++ och andra språk också

Det gäller också debatten kring kompilerade språk resp interpreterande språk. PHP är interpreterande. Att installera en opcode cache, som cachar resultatet av tolkningen av språket, är ett femminutersjobb på vilken server som helst. Det gör att PHP exekverar den intermediära binärkoden direkt istället för att interpretera koden vid varje request. Om jag inte har fel påminner det stark om JIT-kompilering för Java?

Så till typningen. Om man tittar på hur det fungerar bakom kulisserna så använder faktiskt PHP typer. PHP:s variabler lagras i en C-struktur som är bärare av data liksom en del metadata som typ och referenser. För mig är en variabel bärare av data. Typen är sekundär och enligt mig bara information om data. Mitt synsätt skiljer sig uppenbarligen mycket från andra här. Hanteringen av referenser i PHP 5 skiljer sig markant från PHP 4 (som är - just det - utdaterat) eftersom det krävs när objektorienteringen ska fungera bättre. Därmed är eg allt referenser, bakom kulisserna, tills dess att en kopia behöver skapas av någon anledning.
PHP:s hantering av typer gör det också, naturligtvis, svårt att ha konstruktorer baserade på typer... PHP har dock naturligtvis stöd för variabelt antal parametrar vilket gör att man ofta löser detta på ett annat sätt helt enkelt.

Enligt rekommendationen ska PHP köras i strikt läge. Det är tidigare inte standard och många känner inte till att PHP då bland annat varnar för variabler som inte är initierade.

Det finns mycket mer än så att gå igenom om man orkar. Problemet är att det för PHP finns tonvis med tutorials och artiklar som ger riktigt dåliga och ofta rent felaktiga råd baserat på mycket gamla versioner av PHP. Eftersom PHP är så bakåtkompatibelt fungerar mycket när det kanske hade varit bättre att bryta kompatibiliteten bakåt. Därmed försvinner inte all gammal information från webben och det blir för utomstående troligen svårt att bilda sig en uppfattning om språket hur det ser ut och hur det används i seriösa sammanhang idag.

Senast redigerad av dotvoid den 2009-11-09 klockan 18:34 Anledning: Små syftningsfel
dotvoid är inte uppkopplad   Svara med citatSvara med citat