Tag: php

Destruction-driven development

Jeg har kodet en del før jeg begynte på informatikk, men før stuiene var mønster (patterns) et ukjent begrep for meg. Siden PHP i lang tid var det foretrukne språket ble det gjerne gjort nyvinninger nettopp i dette språket (IRC-bot kan nevnes).

For en tid tilbake nevnte jeg en av mine “gode” idéer fra den gang for noen med-studenter, og øyeblikkelig kom navnet “destruction-driven development” opp. Konseptet er i og for seg ikke noe jeg har sett igjen i løpet av årene på Gløshaugen, samt at gjennomføringen er bundet mot utvikling på nett, fortrinnsvis i skripingspråk.

Av og til er det greit å hente inn noen standard-filer som blir til over tid (av litt for mange asiater på Aardvark kalt “custom framework”) for å lage til en demo, simpel to-siders løsning eller lignende, og i den forbindelse fant jeg at jeg ofte glemte å kjøre metoden som skulle vise resultatet til en bruker (mye “feilretting”). Med dette knyttet opp mot Smarty endte jeg opp med å ønske å lage sider slik:

<?php

require_once("autoload.php");
Template::setTemplate("page.tpl");

$t = Template::getInstance();
$t->assign("title", "Forside");
$t->assign("text", "Lorem ipsum...");

?>

Konseptet er å la presentasjon foregår på et punkt hvor man er sikker på at all logikk er kjørt, og hvilket bedre punkt enn ved kjøring av  Garbage Collector (GC) finnes? Ved å la destruction-metoden til template-objektet, som er en subklasse av Smarty, til å kjøre display()-metoden trenger ikke kodesnutten over å gjøre det, samt at jeg slipper å duplisere kode for å vise vise innhold. Se gjerne det vedlagte eksempelprosjekt som benytter Smarty.

Jeg ser i utgangspunktet to problemer med overstående kode, hvilket er grunnen til at jeg ikke vil bruke dette konseptet i prosjekter:

  1. Det vil gjøre prosjektet vanskeligere å feilrette.
  2. Implementasjonen av GC kan endre seg, og ved å oppdatere PHP kan man oppleve at alle sider er blanke. (Les: flere ting som potensielt kan gå galt)

Test av namespace i PHP

PHP 5.3 skal komme med støtte for namespace, og under lesing om namespace i PHP 5.3 oppdaget jeg fålgende setning:

Same namespace name can be used in multiple files.

For å teste dette hentet jeg ned snapshot av PHP 6.0 og kompilerte den direkte på ene maskinen (ups…). Deretter laget jeg noen filer.

index.php:

<?php
function __autoload($class) {
require_once("bar.php");
}

require_once("foo.php");

test::foo::test();
test::bar::test();
?>

foo.php:

<?php
namespace test;

class foo {
public static function test() {
echo "foo";
}
}
?>

bar.php:

<?php
namespace test;

class bar {
public static function test() {
echo "bar";
}
}
?>

Resultatet av kjøringen ble “foobar”, så da kan man altså “fylle opp” et namespace ved behov.

Nå gjenstår det bare å få tak i PHP 5.3 som ferdige pakker til Ubuntu.