Start · Sprachen · PHP · Referenz · Lua

Lua

Klasse

Ermöglicht die Einbettung und Ausführung von Lua-Skripten direkt in PHP über die <code>lua</code>-PECL-Erweiterung.

seit PHP 0.9.0 Kategorie: misc

Signatur

class Lua

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

Typ

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
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!
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
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.