Seite 2 von 3
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 09:22
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.
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 09:42
von oxpus
Ich habe bei mir eine eigene contants.php entwickelt und binde die einfach per include ein.
Geht auch prima.
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 09:49
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
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 10:28
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...
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 10:45
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
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 10:58
von oxpus
Du kannst doch der Klasse die Variable übergeben
dann wäre diese dort auch verfügbar und die Methode statisch zu verwenden.
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 11:12
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';
.
.
.
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 11:51
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.
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 12:02
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...
Re: *_TABLE Konstanten definieren
Verfasst: 18.12.2014 00:23
von nickvergessen