Installera (och använd) php’s beroendehanterare composer i Windows 8

Traditionellt sett så har Microsoft Windowsanvändare de senaste åren varit ganska motvilliga att använda allt annat än det grafiska gränssnittet. Men som webb/php-utvecklare idag, så är det mycket vunnet att kunna använda kommandotolken åtminstone till det allra enklaste. En av anledningarna är composer.

Composer logoComposer är en programvara som hjälper dig att handskas med beroenden i din kod. Genom att definiera vilka beroenden, eller paket som du behöver i ditt projekt, så kan du enkelt ladda ner dem och hålla dem uppdaterade via enkla kommandon. Du får dessutom en autoloader på köpet, som laddar in klasser när du använder dem utan att du behöver använda include eller require i php.

De flesta stora php-ramverk använder sig idag av composer som standard. Och de som inte gör det, borde faktiskt ta sig en allvarlig funderare på att böra göra så.

Installationen av composer har tidigare varit lite bökig i windows-miljö för den ovane, men nu så har installationsprocessen blivit så enkel den bara kan bli.

Installera composer

Gå in på composers hemsida, https://getcomposer.org/ , klicka på download i menyn och ladda ner installationsfilen (Composer-Setup.exe) under överskriften Windows installer.

Kör filen och följ instruktionerna. Standardinställningar är okej att använda. Composer måste veta var php ligger installerat och kommer att fråga efter detta under installationen. På min maskin, med WAMP installerat som lokal server, ser det ut som nedan:

Sökväg till php i composerinstallation

Fortsätt att följa instruktionerna, så ska det snart vara klart!

När installationen är klar kan du kontrollera att allt fungerar genom att öppna en kommandotolk (tryck på windows-tangenten, skriv ”cmd” följt av enter). Om allt fungerar så ska du kunna köra kommandot ”composer” var som helst i mappstrukturen, och resultatet kommer att se ut ungefär som det nedan:

composer i kommandotolken

Där ser du nu vilka argument du kan använda för composer. Läs mer på deras hemsida om alternativen.

Använda composer i ett nytt projekt

Att installera composer är en sak, men att använda den är en annan. Även om dokumentationen är ganska tydlig, så känner jag att ett snabbt exempel på användning måste finnas med i mitt inlägg.

Packagist, är den hemsida som innehåller de officiella paket som composer använder sig av. Där kan du enkelt söka dig fram till ett intressant paket som du skulle vilja testa. Varför inte monolog, ett paket för att logga händelser till fil?

Skapa en ny mapp/projekt på sin webbserver och lägg en ny fil, composer.json i den, med följande innehåll:

{
   "require": {
      "monolog/monolog": "1.12.*@dev"
   }
}

Gå nu in i din nya mapp i kommandotolken och kör ”composer install” (utan citattecken), så kommer monolog att laddas ner och läggas till i ditt projekt. Composer löser dessutom själv monologs beroenden, så att alla paket den är beroende av också laddas ner.

(Har du inte git installerat på din maskin så kommer du att få lite varningar, men det kommer att fungera ändå).

Nu har en ny mapp, ”vendor”, lagts in där alla paket finns lagrade. En autoload-fil har automatiskt skapats som håller reda på vart filerna ligger, så att de kan hittas av composer när du anropar dem. Detta är alltså den enda fil du behöver ladda in för att sedan använda vilket paket som helt som du lagt in i composer.json-filen. Skapa en index.php i roten av ditt projekt för att testa:

<?php
require 'vendor/autoload.php';

$log = new Monolog\Logger('name');
var_dump($log);

När du kör koden, så kommer du att se din nyskapade instans av Monolog-klassen, färdig att användas.

För att lägga till fler paket till ditt projekt, så lägger du till ett nytt beroende i composer.json och kör ”composer update”, så läggs de nya filerna in i projektet!

Gör valet att följa standarder i PHP

PHP Framework Interop Group är en  sammansatt grupp av medlemmar ur många av de allra största ramverken i PHP. Tanken med gruppen är att de ska besluta om gemensamma kodstandarder i PHP-världen. Och med så många både stora och lite mindre aktörer som medlemmar så har (faktiskt) php-fig och deras standarder PSR (Proposed Standards Recommendation) blivit mer än väl accepterat.

Fördelen med att följa en standard är många. Det kan t.ex. handla om allt från att det blir lättare att läsa kod eftersom du är van vid utseendet, till att en standardiserad pakethantering gör det lättare att använda 3’e-parts kod i ditt egna projekt.

Fördelarna är kanske inte så stora om du bara sitter hemma i kammaren och programmerar endast själv, och för dina egna ändamål. Men om du har minsta intresse av att så småningom blanda in flera programmerare, eller kanske publicera ditt projekt för att andra ska kunna använda det, då blir det genast mycket viktigare.

För att inte tala om den dagen du blir anställd programmerare och kan nämna att du följer standarder! Då är det bra att var förberedd och inte så smart att säga ”jag har alltid gjort på detta viset, och kommer att fortsätta med det” 😉

Nedan följer en länkar och en kort beskrivning av några standarder:

PSR-0 beskriver standarder för autoloading av klasser, och därmed även filnamn. Det finns även exempel på hur en autoloader kan se ut med vanlig autoload och med SplClassLoader, som är att föredra framför de två.

PSR-1 beskriver enklare kodstandarder såsom php-taggar, teckenkodning, klass- och metodnamn, konstanter och namespaces.

PSR-2 tar över där PSR-1 slutar och beskriver detaljer kring kodstandarden. Bl.a. beskrivs när radbrytningar och mellanslag ska ske eller inte ske,  var klamrar och paranteser ska läggas, hur indentering i koden ska vara och mycket mer. Detta är den mest utförliga standarden när det gäller ”utseendet” på din kod.

PSR-3 beskriver hur ett interface för loggning av varningar och fel bör se ut. Exempelkod finns även här.

PSR-4 fortsätter att beskriva och komplettera PSR-0, dvs hur autoloadern ska fungera. Nämner även Composer och pakethantering.

 PSR-5 är ännu inte en accepterad standard, men mycket tyder på att den inte kommer att ändra sig så väldigt mycket innan den accepteras. PSR-5 tar upp det som kallas för docblocks, en standard för att kommentera din kod. Docblocks används bland annat av phpDocumentor för att automatiskt generera dokumentation.

Semantic Versioning 2.0.0 är inte en del av php-fig, men beskriver hur du bör tänka när du sätter versioner på ditt projekt.