Fremde Klassen in Modulen ansprechen

Ich würde gerne JSONPath verwenden.

Entweder
Peekmo/JsonPath · GitHub
oder auch
FlowCommunications/JSONPath · GitHub

Kann ich die Klassen innerhalb eines Moduls ansprechen?

Bei Peekmo steht zur Installation:

Add this to your composer.json :
„require“: {
„peekmo/jsonpath“: „dev-master“
}
You just have to require the vendor/autoload.php (if not already) and add the following use :

use Peekmo\JsonPath\JsonStore;

Geht das auch mit einem IPS Modul wie muss ich das da eintragen?

Hi!

Ich würde mir die komplette Klasse einfach in einen Unterordner vom Modul kopieren und dann einen einfachen include machen.

So wie Michael es hier mit /Net/SSH2 gemacht hat:
IPSSqueezeBox/module.php at master · Nall-chan/IPSSqueezeBox · GitHub

set_include_path(__DIR__);
require_once (__DIR__ . '/Net/SSH2.php');

Grüße,
Chris

In dem Beispiel sind ja die Funktionen innerhalb von public function RequestState() geladen. Wenn ich aber jetzt einen kompletten Namespace nutzen will mit mehrerern Dateien? Kann ich dann auch den Klassen aus dem Namespace ansprechen oder müste ich alle Klassen in eine Datei kopieren und diese dann über include einbinden?

Ah, namespace und use :slight_smile: Ich sollte mehr lesen :smiley:

Mit „namespace“ benennst du deinen eigenen „Bereich“ und mit „use“ legst du quasi eine Verknüpfung zu einem Ordner mit PHP Dateien (Namespace) und „use“ ist dann grooob gesagt der include.
…sofern ich das richtig verstanden habe g

PHP: FAQ: Dinge, die Sie über Namespaces wissen sollten - Manual
PHP: Namespaces verwenden: Aliase/Importieren - Manual

Hast du einfach mal ausprobiert das bei dir rein zu kopieren und mit „use“ einzubinden? Im 1. Link sehe ich spontan auch direkt das Beispiel vom Author:

use Peekmo\JsonPath\JsonStore;

…das sind die Ordner aus seinem GIT und da drin liegen dann seine Dateien die mit „use“ verwendet werden können.

Und damit kannste dann in deinem Skript:

$store = new JsonStore($json);

…und anderes machen.

Grüße,
Chris