Signatur
Beschreibung
Die Klasse Lua ist Teil der PECL-Erweiterung lua und stellt eine Brücke zwischen PHP und der Skriptsprache Lua bereit. Mit ihr lassen sich Lua-Skripte und -Funktionen direkt aus PHP heraus ausführen, Variablen zwischen beiden Umgebungen austauschen und PHP-Funktionen in Lua registrieren.
Typische Anwendungsfälle sind Plugin-Systeme, bei denen Endnutzer eigene Lua-Skripte einbringen dürfen, ohne direkten PHP-Zugriff zu haben. Lua ist dabei bewusst als leichtgewichtige, einbettbare Scriptsprache konzipiert und bietet ein überschaubares Sicherheitsmodell gegenüber der vollen PHP-Umgebung.
Die Klasse bietet Methoden wie eval() zum direkten Ausführen von Lua-Code-Strings, include() zum Laden von Lua-Dateien, assign() zum Übergeben von PHP-Werten an Lua sowie call() zum Aufruf definierter Lua-Funktionen. Rückgabewerte werden automatisch in PHP-Typen konvertiert.
Voraussetzung ist die Installation der PECL-Erweiterung lua sowie einer kompatiblen Lua-Bibliothek auf dem System. Die Erweiterung ist nicht im PHP-Kern enthalten und muss separat kompiliert bzw. installiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lua_file | string | Optionaler Pfad zu einer Lua-Datei, die beim Instanziieren des Objekts direkt geladen und ausgeführt wird. |
Rückgabewert
Beispiele
Einfaches Lua-Skript auswerten
<?php
// Voraussetzung: PECL-Erweiterung 'lua' ist installiert
$lua = new Lua();
// Lua-Code direkt als String ausführen
$result = $lua->eval(<<<LUA
return 2 + 3
LUA);
echo $result; // Ausgabe: 5
PHP-Variable an Lua übergeben und Lua-Funktion aufrufen
<?php
$lua = new Lua();
// PHP-Wert in den Lua-Kontext übertragen
$lua->assign('greeting', 'Hallo');
$lua->assign('name', 'Welt');
// Lua-Funktion definieren und aufrufen
$lua->eval(<<<LUA
function buildMessage(g, n)
return g .. ', ' .. n .. '!'
end
LUA);
$message = $lua->call('buildMessage', ['Hallo', 'Welt']);
echo $message; // Ausgabe: Hallo, Welt!
PHP-Funktion in Lua registrieren
<?php
$lua = new Lua();
// PHP-Funktion als Lua-Callback registrieren
$lua->registerCallback('phpStrlen', 'strlen');
$result = $lua->eval(<<<LUA
return phpStrlen('Programmierung')
LUA);
echo $result; // Ausgabe: 14
// Wichtig · Fallstricke
Sicherheit: Obwohl Lua-Code isoliert von der PHP-Umgebung läuft, sollten Benutzereingaben, die als Lua-Code ausgeführt werden, sehr sorgfältig validiert werden. Lua besitzt Funktionen wie os.execute() oder io.open(), die Systemzugriffe ermöglichen. Im Produktionseinsatz mit nicht vertrauenswürdigem Lua-Code empfiehlt sich die Einschränkung der Lua-Standardbibliotheken.
Verfügbarkeit: Die Klasse steht nur zur Verfügung, wenn die PECL-Erweiterung lua installiert ist (pecl install lua). Sie ist nicht Teil der PHP-Standardinstallation. Die Lua-Bibliothek (z. B. liblua5.3-dev) muss ebenfalls auf dem System vorhanden sein.
Typkonvertierung: Lua-Tabellen werden als PHP-Arrays zurückgegeben. Lua kennt keinen expliziten Integer-Typ, daher können numerische Rückgabewerte als float in PHP ankommen.