Oh, stimmt, gar nicht drüber nachgedacht.
Grüße,
Kai
Oh, stimmt, gar nicht drüber nachgedacht.
Grüße,
Kai
IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
Einfach mal rein schauen: IP-Symcon Discord Channel
Du kannst einer verwendeten Klasse einen callback zum Debuggen mitgeben, damit diese darauf zugreifen kann.
Klar:
Klasse mit Debug erhält im Konstruktor den Callback:
PHP-Code:
public function __construct(callable $sendDebug)
{
$this->sendDebug = $sendDebug;
}
Klasse in module.php instanziieren und dabei den Callback übergeben:
Dann kann innerhalb der DebugClass die Funktion $this->SendDebug wie gewohnt verwendet werden.PHP-Code:
$this->object = new DebugClass(
function ($Message, $Data, $Format) {
$this->SendDebug($Message, $Data, $Format);
}
);
Hallo Zusammen,
ich muss nochmal etwas nachfragen zu den traits.
wenn ich in einem Modul einen trait innerhalb eines Moduls include und ein Trait hat z.B. den Namen Notifications .. so wird dieser ja Bestandteil des Moduls.
Wenn ich in einem weiteren Modul das selbe mache...Code:// Include all files in helper folder include_once __DIR__ . '/helper/autoload.php'; class TestModuleOne extends IPSModule { // Helper use Notifications; .....
im helper Ordner eines jedem Moduls befindet sich die Datei notifications.php mit folgendem Inhalt:Code:// Include all files in helper folder include_once __DIR__ . '/helper/autoload.php'; class TestModuleTwo extends IPSModule { // Helper use Notifications; .....
tritt dann auch der genannte Fehler auf? Es befindet sich ja alles innerhalb des Moduls.Code:<?php // Declare declare(strict_types=1); trait Notifications { //#################### Notifications public function Notification(string $Text) { // do something } }
Oder tritt dies auf, wenn es nur einen "globalen" Trait Notifications gibt und dieser in beiden Modulen verwendet werden soll?
Also bei mir geht es primär nicht um Vererbung, sondern soll für mich zu einem übersichtlicheren Code verhelfen.
Uli
Wenn es der gleiche absolute Dateipfad ist, geht das.
Michael
on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC
Hier zum Beispiel:
[Modul] Tasmota - Seite 84
Michael
on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC
Ja, das habe ich auch gelesen.
Aber eine Lösung haben wir jetzt noch nicht dafür, oder?
Grüße,
Kai
IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
Einfach mal rein schauen: IP-Symcon Discord Channel
Ich habe durch etwas externen Input (dank an Paresy) jetzt eine Lösung für mich gefunden.
Ist aber sehr Tricky und man hat schnell einen Knoten im Kopf.
Überlegung ist alle Traits mit einem Namespace zu nutzen.
PHP-Code:
namespace bvip;
/**
* DebugHelper ergänzt SendDebug um die Möglichkeit Array und Objekte auszugeben.
*/
trait DebugHelper
{
...
Da ich aber irgendwann alle gleichen Traits als Submodul für alle meine Module nutzen möchte, sobald der Store dies unterstützt, hat man wieder das gleiche Problem.PHP-Code:
require_once __DIR__ . '/../libs/helper/DebugHelper.php';
class BVIPDiscovery extends IPSModule
{
use bvip\DebugHelper,
bvip\BufferHelper;
Da dann mehrere Dateien mit den gleichen NS\Trait auf dem Dateisystem liegen.
Somit muss beim laden der externen Traits ein individueller Namespace benutzt werden.
PHP-Code:
/**
* DebugHelper ergänzt SendDebug um die Möglichkeit Array und Objekte auszugeben.
*/
trait DebugHelper
{
...
Das wird dann noch komplizierter, wenn die Traits irgendwo Klassen benutzen. Dann wird versucht die Klasse mit dem NS zu finden.PHP-Code:
eval('namespace bvip {?>' . file_get_contents(__DIR__ . '/../libs/helper/DebugHelper.php') . '}');
eval('namespace bvip {?>' . file_get_contents(__DIR__ . '/../libs/helper/BufferHelper.php') . '}');
class BVIPDiscovery extends IPSModule
{
use bvip\DebugHelper,
bvip\BufferHelper;
Oder wenn man weitere Vererbung mit anderen Klassen nutzen. Zum Beispiel wenn vier Module (hier sind Module innerhalb einer Library gemeint) die gleiche Code-Basis einer Basisklasse nutzen sollen, welche wiederum Traits nutzen und von ipsmodule erben muss.
Michael
Geändert von Nall-chan (13.04.19 um 20:47 Uhr)
on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC