*_TABLE Konstanten definieren

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von nickvergessen »

Konstanten sind genau so doof wie globals und static.
Sie sorgen immer wieder für Probleme, wo dann phpBB nicht mit Bridge/Software xyz zusammen funktioniert.
kein Support per PN
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5389
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von oxpus »

Ich habe bei mir eine eigene contants.php entwickelt und binde die einfach per include ein.
Geht auch prima.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

nv hat geschrieben:Konstanten sind genau so doof wie globals und static.
Da gebe ich Dir ja grundsätzlich recht, aber es muss doch eine praktikablere Möglichkeit geben, globalen Code einzubinden, als dieser lange Sermon mit getParameter...
Fakt ist aber, dass auch phpBB im Core Konstanten benutzt, also sollte man das imo den Extension-Entwicklern auch zugestehen und entsprechend eine einfache Möglichkeit bieten, Konstanten zu definieren (wie gesagt z.B. durch einen Parameter in einer yml).
oxpus hat geschrieben:ch habe bei mir eine eigene contants.php entwickelt und binde die einfach per include ein.
Geht auch prima.
Geht schon, mache ich ja auch so, ist aber nicht sehr elegant. Wenn man das über den Classloader macht, hat das eben den Vorteil, dass man sich nicht darum kümmern muss, ob der Code schon eingebunden ist, oder nicht. Man bindet es einfach ein und benutzt es. Außerdem muss man sich über Pfade keine Gedanken machen.

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5389
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von oxpus »

Sicher, elegant ist es nicht.
Alternativ könnte man auch dort die Variablen füllen, wenn man die Tabellen ordentlich definiert und dann einbinden. Also entweder per Klasse oder wieder per include.
Bei meiner ersten Extention will ich das ja auch noch ändern, aber der erste Test auf einen anderen Forum läuft gerade und dort will die Extention momentan so gar nicht richtig funktionieren...
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

Bin gerade auch noch am Experimentieren... Einerseits würde ich mich da gerne an die phpBB-Konventionen halten, aber andererseits halte ich das einfach für nicht praktikabel.

Momenten habe ich mir so beholfen

Code: Alles auswählen

<?php 
namespace dave\userdelete\includes;

/**
*  Class for constants
*  @property-read string $DELETE_PROFILE_MODE_BAN 
*  @property-read string $DELETE_PROFILE_MODE_ANONYMIZE
*  @property-read string $DELETE_PROFILE_MODE_COMPLETE
*  @property-read string USER_DELETE_TABLE
*/
class constants
{
    //Constants:
    protected $DELETE_PROFILE_MODE_BAN = 1;
    protected $DELETE_PROFILE_MODE_ANONYMIZE = 2;
    protected $DELETE_PROFILE_MODE_COMPLETE = 3;
    
    public function __construct()
    {
        global $table_prefix;
        
        //Tables:
        $this->USER_DELETE_TABLE = $table_prefix . 'user_delete';
    }     
    
    public function __get($name_STR)
    {
        //check if the parameter exist and return it  
        if (isset($this->$$name_STR))
        {
            return $$name_STR;
        }
        //otherwise throw an exception:
        else
        {
            throw new  \dave\userdelete\exceptions\invalid_constant_exception('Invalid Constant: ' . $name_STR);
        }
    }
}

?>



Zur Benutzung muss man in der Verwendeten Klasse einfach eine neue Instanz erzeugen

Code: Alles auswählen

class my_class
{
    protected $CONST;

    function __construct()
    {
        $this->CONST = new \dave\userdelete\includes\constants();

        $sql = "SELECT bla FROM " . $this->CONST->USER_DELETE_TABLE . "
.
.
.
- Es ist zentral implementiert
- benutzt den Classloader
- halbwegs sauberes OOP
- man kann Konstanten nicht überschreiben
- nicht ganz so umständlich wie get_parameter()


Richtig glücklich bin ich damit allerdings nicht... Immer noch ein wenig VonHintenDurchDieBrustInsAuge. Außerdem bräuchte man eigentlich keine Instant, sondern müsste statisch auf die Parameter zugreifen können, was aber nicht geht, weil man immer den $table_prefix noch braucht...

Gruß, Dave
Zuletzt geändert von D@ve am 17.12.2014 12:16, insgesamt 3-mal geändert.
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5389
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von oxpus »

Du kannst doch der Klasse die Variable übergeben
dann wäre diese dort auch verfügbar und die Methode statisch zu verwenden.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

oxpus hat geschrieben:Du kannst doch der Klasse die Variable übergeben
dann wäre diese dort auch verfügbar und die Methode statisch zu verwenden.
Wie kann ich einer Klasse eine Variable übergeben?

Sowas funktioniert nicht...

Code: Alles auswählen

class foo 
{
     static $USER_TABLE = $table_prefix . 'user_table';
.
.
. 
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
oxpus
Ehemaliges Teammitglied
Beiträge: 5389
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von oxpus »

Na, Klassenaufrufen kann man doch Parameter übergeben.
Musst die dann halt im Konstruktor mit definieren.
Alternativ eine Methode erstellt, der du die Variable übergibst und dann weiter verwendest.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

Na, Klassenaufrufen kann man doch Parameter übergeben.
Ich will ja keine Methode aufrufen, sondern einen Wert abfragen...

Du meinst vermutlich so:

Code: Alles auswählen

$sql = "SELECT bla FROM " . Constants::get_table('USER_TABLE', $table_prefix) . "WHERE 1" 
Das hebelt dann wieder die Code Completion aus... Da finde ich mein obige Lösung eleganter.


PS: Gerade einen Bug gefunden... Das PHP-Syntax-Highlighning im BBCode funktioniert hier nicht, wenn man zwei Code Blöcke hat...
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von nickvergessen »

Ich kenn das Problem, hab mir irgendwann mal nen Umweg gebaut.
Eine tables Klasse die aus dem Container alle Namen holt und über ne Kurzform ausgibt:
https://github.com/nickvergessen/phpbb- ... tables.yml
https://github.com/nickvergessen/phpbb- ... ces.yml#L9
https://github.com/nickvergessen/phpbb- ... tables.php
kein Support per PN
Antworten

Zurück zu „Extension Bastelstube“