2008-08-16 4 views
5

Ich möchte php etwas wie folgt definieren:Wie man Site-weite Variablen in PHP einrichten?

$EL = "\n<br />\n"; 

und dann diese Variable als „endline“ Marker alle über meine Website wie folgt verwenden:

echo "Blah blah blah{$EL}"; 

Wie kann ich Definiere $ EL einmal (in nur 1 Datei), füge es auf jeder Seite meiner Site ein, und nicht muss es mit der (seltsam rückwärts) global $EL; Anweisung in jeder Seitenfunktion referenzieren?

Antwort

6

Die meisten PHP-Sites sollten eine Datei (ich nenne es eine Überschrift), die Sie auf jeder einzelnen Seite der Website enthalten. Wenn Sie diese erste Zeile Code in der Header-Datei setzen, schließen dann es wie folgt auf jeder Seite:

include 'header.php'; 

Sie nicht das Schlüsselwort global oder irgendetwas, das zweite Codezeile verwenden müssen sollten Sie geschrieben Arbeit.

Edit: Oh Entschuldigung, das funktioniert nicht innerhalb Funktionen ... jetzt sehe ich dein Problem.

Edit # 2: Ok, nehmen Sie meinen ursprünglichen Ratschlag mit der Überschrift, aber verwenden Sie eine define() anstelle einer Variablen. Diese arbeiten nach der Einbindung in Funktionen.

-1

IIRC eine übliche Lösung ist eine einfache Datei, die Ihre Deklarationen enthält, die Sie in jede Quelldatei einfügen, etwa 'constants.inc.php'. Dort können Sie eine Menge anwendungsweiter Variablen definieren, die dann in jede Datei importiert werden.

Noch müssen Sie die Include-Direktive in jede einzelne Quelldatei, die Sie verwenden, bereitstellen. Ich habe sogar einige Projekte mit dieser Technik gesehen, um Lokalisierungen für mehrere Sprachen bereitzustellen. Ich würde den gettext-Weg bevorzugen, aber vielleicht ist diese Variante einfacher für den durchschnittlichen Benutzer zu arbeiten.

bearbeiten Für Ihr Problem recomment ich die Verwendung von $ GLOBALS [], Example #2 für Details.

Wenn das immer noch nicht anwendbar, ich würde versuchen, PHP5 Objekte digg nach unten und erzeugen eine statische Singleton, die statischen Konstanten benötigt liefert (http://www.developer.com/lang/php/article.php/3345121)

-1

Sessions werden die beste Wahl sein, wenn die Benutzerdaten Spezifisch, verwenden Sie einfach eine Conifg-Datei. config.php:

<?php 
$EL = "\n<br />\n"; 
?> 

Dann auf jeder Seite hinzufügen

require 'config.php' 

die Sie $ EL für den Zugriff auf diese Seite können.

3

Klingt wie der Job einer Konstante. Siehe die Funktion define().

0

@svec ja das wird, Sie müssen nur die Datei innerhalb der Funktion auch enthalten. So funktioniert die meiste meiner Software.

function myFunc() 
{ 
require 'config.php'; 
//Variables from config are available now. 
} 
1

Verwenden Sie PHP5? Wenn Sie die Funktion __autoload() definieren und eine Klasse mit einigen Konstanten verwenden, können Sie sie dort aufrufen, wo Sie sie benötigen. Die einzige erschwerende daran ist, dass Sie etwas haben, ein wenig länger zu geben, wie

MyClass::MY_CONST 

Der Vorteil ist, dass, wenn Sie jemals den Weg entscheiden, zu ändern, die Sie neue Linien behandeln, müssen Sie nur ändern müssen in ein Platz.

Natürlich ist ein mögliches Negativ, dass Sie eine zusätzliche Funktion aufrufen (__autoload()), die diese Funktion ausführt (wenn Sie auf die Klasse verweisen), die dann eine andere Datei (Ihre Klassendatei) lädt. Das könnte mehr Aufwand bedeuten, als es wert ist.

Wenn ich einen Vorschlag anbiete, würde es diese Art von Echo vermeiden, die Echo-Tags (wie <br />) erfordert. Wenn Sie etwas mehr Template-artig einrichten könnten, könnten Sie mit den nls umgehen, ohne sie explizit eingeben zu müssen. Also statt

echo "Blah Blah Blah\n<br />\n"; 

Versuch:

<?php 
if($condition) { 
?> 
<p>Blah blah blah 
<br /> 
</p> 
<?php 
} 
?> 

Es ist einfach zu mir scheint, wie Klassen aufrufen oder diese Variablen innerhalb von Funktionen sowie aus viel Arbeit ist, die nicht zu werden braucht getan und, wenn irgend möglich, solche Situationen am besten vermeiden.

0

Eine andere Option besteht darin, ein Objekt mit öffentlichen statischen Eigenschaften zu verwenden. Ich benutzte $ GLOBALS, aber die meisten Editoren vervollständigen $ GLOBALS nicht automatisch. Außerdem sind nicht-instanziierte Klassen überall verfügbar (da Sie überall installieren können, ohne PHP anzugeben, werden Sie die Klasse verwenden). Beispiel:

<?php 

class SITE { 
    public static $el; 
} 

SITE::$el = "\n<br />\n"; 

function Test() { 
    echo SITE::$el; 
} 

Test(); 

?> 

Dies wird Ausgang <br />

Dies ist auch einfacher zu handhaben als Costants wie Sie jede Art von Wert in der Eigenschaft setzen können (array, string, int, etc.), während Konstanten nicht enthalten Arrays.

Dies wurde mir von einem Benutzer auf der PhpEd forums vorgeschlagen.

0

Svec, verwenden Sie ein PHP-Framework. Einfach irgendwas - es gibt viele von ihnen da draußen. Dies ist der richtige Weg, es zu tun. Mit Framework haben Sie einen einzigen Eintrag Punkt für Ihre Anwendung, so dass die Definition Site-weite Variablen ist einfach und natürlich. Sie müssen auch nicht um Header-Dateien einschließlich kümmern prüfen, ob Benutzer auf jeder Seite angemeldet ist - decent Framework wird es für Sie tun.

See:

investieren einige Zeit in einer von ihnen zu lernen und es wird zurückzahlen sehr bald.

1

Diese Mitteilung define ('el','\n\<\br/>\n'); speichern Sie es als el.php

dann können Sie alle Dateien enthalten, die Sie verwenden möchten, das heißt

echo ‚something'.el; // beachten Sie, ich hinzufügen el gerade am Ende der Zeile oder vor

Hope this Hilfe

beachten Sie bitte die ‚\‘ nach < br entfernen, da ich es musste in oder es wird nicht br-Tag auf die zeigen, Antwort ...