4: Syntax & Structuur

Phlo compileert .phlo bronbestanden naar gewone PHP-klassen en gegenereerde middelen. De syntaxis is PHP-achtig, maar zonder puntkomma's aan het einde van uitspraken.

4.1: Bestandsstructuur

Een .phlo-bestand kan top-level controllercode en knooppunten bevatten:

Voorbeeld:

route both GET home => view($this)

prop title = 'Welkom'

view:
<h1>$this->title</h1>

4.2: Statements en de lijnparser

Statements eindigen bij een regelafbreking, niet bij een puntkomma:

$count = 1
if ($active) $count++

Dit werkt omdat de compiler een ; toevoegt aan elke regel en deze alleen verwijdert waar de regel duidelijk doorgaat. De volledige set regels:

$label = $visitors === 1 \
    ? 'visitor' \
    : 'visitors'

Het mentale model: stop met het volledig denken aan puntkomma's. Vraag alleen "is mijn verklaring op deze regel compleet?" Zo niet, eindig de regel met een van ( [ { , . (wat van nature gebeurt in de meeste meerregelige code) of met een expliciete \.

Zonder een impliciete of expliciete continuatie, wordt elke regel zijn eigen verklaring. Daarom moet in meerregelige aanroepen elke argumentregel eindigen met een komma, inclusief de laatste:

apply (
    title: 'Done',
    main: '<p>Ready</p>',
)

Les. De parser voor knooppunten op bestandsniveau houdt meerregelige knooppuntlichamen bij door haakjes te tellen, niet vierkante haken. Een meerregelige prop x => [ ... ] beëindigt het knooppunt na de eerste regel en de resterende regels worden losstaande controllercode (Controller moet op één plek zijn). Open meerregelige knooppuntlichamen met een haakje: prop x => arr(...) of prop x => array_merge(...).

4.3: Controller code

Code op het hoogste niveau dat geen node is, wordt controllercode van de gegenereerde klasse. Die code wordt uitgevoerd wanneer de instantie voor het eerst wordt opgehaald.

prop ready = false

$this->ready = true

Gebruik controllercode voor lichte initialisatie. Plaats verzoeklogica in routes en methoden in plaats daarvan.

4.4: Instanties

Gebruik %name om een Phlo-object op te halen via de instance manager:

%payload->name
%session->user
%creds->mysql->database

De instantie wordt lui aangemaakt en vervolgens hergebruikt binnen het verzoek.

Les. De compiler herschrijft %name OVERAL in een .phlo-bestand, inclusief binnen stringliteral. Een pagina die probeerde de letterlijke tekst %session af te drukken in een codevoorbeeld verzond phlo('session') naar zijn bezoekers. Voorbeeldcode die letterlijk moet blijven, behoort in externe bestanden (.txt, .md) die tijdens runtime worden geladen, nooit in .phlo stringliteral.

4.5: Props

Statische prop:

prop title = 'App'

Berekenende prop:

prop fullName => $this->first.' '.$this->last

Berekenende props worden gegenereerd als getters en kunnen worden gelezen als een property:

$this->fullName

4.6: Methoden

Enkel-regel methode:

method label($value) => ucfirst($value)

Meerdere-regels methode:

method label($value){
    if (!$value) return void
    return ucfirst($value)
}

4.7: Functies

Je definieert globale functies met function:

function initials($name){
    return strtoupper(substr($name, 0, 1))
}

Gebruik dit spaarzaam. Voor app-code is een reguliere app-klasse meestal beter; alleen framework-brede helpers horen in een runtime resource thuis.

4.8: Statics

Statische waarde:

static table = 'users'

Statische methode:

static label($value) => ucfirst($value)

Aanroep:

user::label('jordi')

4.9: Strings en operatoren

Strings en operatoren volgen PHP:

$name = 'Jordi'
$title = "Hello $name"
$active = $count > 0 && !$archived

Gebruik void voor een lege string wanneer dat de intentie duidelijk maakt.

4.10: Benamde argumenten

Genomineerde argumenten werken zoals in PHP en houden aanroepen leesbaar:

%DB->load (
    table: 'users',
    where: 'active=1',
    order: 'name',
)

4.11: Foutafhandeling en JSON-antwoorden

error('message', $code = 500) beëindigt een verzoek met een status. Het gooit (geen return nodig), en de engine rendert het om aan het verzoek te voldoen:

if (!$record) error('Record not found', 404)

Klantfouten ($code < 500) behouden hun bericht; serverfouten (>= 500) blijven algemeen ("Error") tenzij debug: true, zodat interne onopgevangen uitzonderingen standaard niet worden blootgesteld.

Voor een succesvolle JSON-respons gebruik je output($data, code:): een array wordt automatisch gecodeerd en code stelt de status in. Een JSON API route gebruikt daarom output() voor resultaten en error() voor mislukkingen, zonder per-app responswrapper.

debug: true (instellen in www/app.php) schakelt uitgebreide debug-uitvoer in; runtime-fouten worden gelogd naar data/errors.json.

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.