4: Syntax & Structuur

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

4.1: Bestandstructuur

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

Voorbeeld:

route both GET home => view($this)

prop title = 'Welcome'

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

4.2: Statements en de lijnparser

Uitspraken eindigen bij een regelafbreking, niet bij een puntkomma:

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

Dit werkt omdat de transpiler 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 denken aan puntkomma's. Vraag alleen "is mijn verklaring compleet op deze regel?" 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 voortzetting, 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 node-parser op bestandsniveau houdt meerregelige node-lichamen bij door haakjes te tellen, niet vierkante haken. Een meerregelige prop x => [ ... ] beëindigt de node na de eerste regel en de resterende regels worden losstaande controllercode (Controller moet op één plek zijn). Open meerregelige node-lichamen 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 controller code voor lichte initialisatie. Plaats de verzoeklogica in routes en methoden.

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 transpiler herschrijft %name OVERAL in een .phlo-bestand, inclusief binnen stringliteral. Een pagina die de letterlijke tekst %session probeerde 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

Berekenbare props worden gegenereerd als getters en kunnen als een eigenschap worden gelezen:

$this->fullName

4.6: Methoden

Enkele regel methode:

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

Multiline 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: Statica

Statische waarde:

static table = 'users'

Statische methode:

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

Oproep:

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 een per-app responswrapper.

debug: true (instellen in www/app.php) schakelt gedetailleerde 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.