*_TABLE Konstanten definieren
- nickvergessen
- Ehrenadmin
- Beiträge: 11559
- Registriert: 09.10.2006 21:56
- Wohnort: Stuttgart, Germany
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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.
Sie sorgen immer wieder für Probleme, wo dann phpBB nicht mit Bridge/Software xyz zusammen funktioniert.
kein Support per PN
- oxpus
- Ehemaliges Teammitglied
- Beiträge: 5394
- Registriert: 03.02.2003 12:33
- Wohnort: Bad Wildungen
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
Ich habe bei mir eine eigene contants.php entwickelt und binde die einfach per include ein.
Geht auch prima.
Geht auch prima.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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...nv hat geschrieben:Konstanten sind genau so doof wie globals und static.
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).
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.oxpus hat geschrieben:ch habe bei mir eine eigene contants.php entwickelt und binde die einfach per include ein.
Geht auch prima.
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
- oxpus
- Ehemaliges Teammitglied
- Beiträge: 5394
- Registriert: 03.02.2003 12:33
- Wohnort: Bad Wildungen
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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...
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!!
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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
Zur Benutzung muss man in der Verwendeten Klasse einfach eine neue Instanz erzeugen
- 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
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 . "
.
.
.
- 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
- oxpus
- Ehemaliges Teammitglied
- Beiträge: 5394
- Registriert: 03.02.2003 12:33
- Wohnort: Bad Wildungen
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
Du kannst doch der Klasse die Variable übergeben
dann wäre diese dort auch verfügbar und die Methode statisch zu verwenden.
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!!
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
Wie kann ich einer Klasse eine Variable übergeben?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.
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
- oxpus
- Ehemaliges Teammitglied
- Beiträge: 5394
- Registriert: 03.02.2003 12:33
- Wohnort: Bad Wildungen
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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.
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!!
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
Ich will ja keine Methode aufrufen, sondern einen Wert abfragen...Na, Klassenaufrufen kann man doch Parameter übergeben.
Du meinst vermutlich so:
Code: Alles auswählen
$sql = "SELECT bla FROM " . Constants::get_table('USER_TABLE', $table_prefix) . "WHERE 1"
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
- nickvergessen
- Ehrenadmin
- Beiträge: 11559
- Registriert: 09.10.2006 21:56
- Wohnort: Stuttgart, Germany
- Kontaktdaten:
Re: *_TABLE Konstanten definieren
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
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