| |
|
Wie kann ich mehrere Variablen automatisch in einer Funktion globalisieren? |
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
 |
|
| Wie kann ich mehrere Variablen automatisch in einer Funktion globalisieren? |
 |
Ich habe eine Funktion die mir ein paar kleinigkeiten macht und aufgrund des gesamten Aufbaus des Projekts muss ich in der Funktion restlos alle Variablen die Seitenkomponenten beinhalten könnten immer globalisieren. Das heißt kommt ein Element dazu muss ich immer daran denken auch die Liste der globalisierten Variablen zu erweitern. Kann ich das nicht irgendwie automatisieren? Jedes mal mache ich was und denke erst nicht dran und wunder mich dann das es nicht funktioniert. Außerdem wär es schon toll wenn immer nur das globalisiert wird was ich grade benötige abhängig davon was aufgerufen wurde. Hat jemand schon mal sowas gemacht?
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
03.01.2008 18:56 |
|
|
Ebay
 |
|
|
|
Spy
Member
 

Dabei seit: 16.09.2005
Beiträge: 126
 |
|
Kann man das nicht irgendwie mit einen Array lösen ? Was irgendwoher die Daten nimmt und dann erweitert?
__________________ Die Welt ist irgendwie total Buggy programmiert
|
|
03.01.2008 22:43 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von Spy am 03.01.2008 um 22:43 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
Themenstarter
 |
|
Keine Ahnung ich hab mir das schon paar mal durch den Kopf gehen lassen nur noch nie was brauchbares gefunden. Zu schade aber auch.
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
03.01.2008 23:51 |
|
|
Affilimatch
 |
|
|
|
sourceforge
Bloody Newb

Dabei seit: 19.01.2006
Beiträge: 3
 |
|
param übergabe per $_REQUEST oder $_GET. $_SESSION wäre auch möglich. das ganze packst in ein handliches array
innerhalb der klasse kannst dann vergleichen was vorhanden ist und was net und somit das fehlende ergänzen und globalisieren
|
|
08.01.2008 02:27 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von sourceforge am 08.01.2008 um 02:27 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
badmoon2049
Moderator
Dabei seit: 17.10.2005
Beiträge: 189
Herkunft: Leipzig
 |
|
hätt ich auch vorgeschlagen per request auf die Vars zuzugreifen.. aber wie ich ihn verstanden hab will er in einer function variabeln globalisieren oder so..
|
|
08.01.2008 07:26 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von badmoon2049 am 08.01.2008 um 07:26 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
Ebay
 |
|
|
|
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
Themenstarter
 |
|
Ja genau also das wird so nichts werden.
Mal ein Beispiel.
Ich hab eine PHP Datei in der wird zuerst eine Datei functions.inc.php includiert. In dieser sind diverse Funktionen enthalten unter anderem die Funktion myparse(). Jetzt wird in der PHP Datei mehreres aus einzelnen Textdateien geladen wie z.B. header, footer und content. Jedes einzelne Dokument schicke ich durch die Funktion myparse() und am Ende des ganzen ist dann eine Ausgabe. Zwischendrin wird das ganze noch evaluiert für die Ausgabe. Wenn ich nun in der Funktion die drei Variablen $header, $footer und $content globalisiere ist das kein thema dann sind am Ende alle drei Variablen auch noch gefüllt. Mache ich dies jedoch nicht dann ist der Inhalt weg. In meinem Fall habe ich nun allerdings nicht drei Variablen sondern pro Seite ca. 10-20 Variablen. Und damit ich nicht für jede Seite eine Funktion schreiben muss sind das bei 10 Seiten etwa 100 Variablen. Diese muss ich nun komplett alle globalisieren damit das ganze läuft.
Meine Idee war es jetzt irgendwie was zu nutzen was automatisch in einer Funktion schaut "Wenn Variable nicht leer dann globalisiere" oder irgendwas in der Richtung. Ich hab schon versucht alle verwendeten Variablen in ein Array zu packen und dann das Array ansich zu globalisieren. Das wär auch noch nicht die perfekte Lösung aber auch das hat nicht funktioniert.
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
08.01.2008 08:39 |
|
|
davil
Newb

Dabei seit: 07.04.2004
Beiträge: 30
Herkunft: Wien
 |
|
Ich weiß nicht, ob es für die Antwort etwas zu spät ist, aber vielleicht hilft das ja noch:
Wenn du die Namen der Variablen im Parser kennst, kannst du sie prinzipiell ganz einfach globalisieren:
| code: |
1:
2:
3:
4:
|
// variable $header globalisieren
$varname = 'header';
global $$varname; |
|
Der Vorteil dieser Lösung liegt darin, dass du viele Variablen in einer Liste durchgehen und dynamisch globalisieren kannst.
Falls du woanders nachschauen willst, welche Variablen du so globalisiert hast, würde ich empfehlen, die Namen der Variablen einfach an eine globale String-Liste zu hängen:
| code: |
1:
2:
3:
|
global $global_list;
$global_list .= ';'.$varname; |
|
Damit erhältst du eine Semikolon-getrennte Liste (';header;footer;irgendwas'), die du jederzeit per explode() auftrennen und dann wieder alle enthaltenen Variablennamen globalisieren kannst - voila ;-)
Ich persönlich würde in diesem fall allerdings auf die mächtigen Möglichkeiten der Objektorientierung in PHP zurückgreifen und eine kleine statische Klasse bauen, der ich per set() und get() beliebige Name/Werte-Paare zuweisen und abfragen kann:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
class data {
private static $properties = array();
public static function set($name, $value) {
self::$properties[$name] = $value;
}
public static function get($name) {
return (isset(self::$properties[$name])) ? self::$properties[$name] : '';
}
public static function getAll() {
return self::$properties;
}
} |
|
Der Teil:
| code: |
1:
2:
|
return (isset(self::$properties[$name])) ? self::$properties[$name] : ''; |
|
ist so gemacht, damit NULL-Werte als leerer String zurückkommen. Wenn das nicht notwendig ist, reicht natürlich:
| code: |
1:
2:
|
return self::$properties[$name];
|
|
Diese Daten könnten dann z.B. so zugewiesen und woanders wieder ausgelesen werden:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
function a() {
// hier wird was gesetzt
data::set('header', $header);
}
function b() {
// hier wird was anderes gesetzt
data::set('footer', $footer);
}
function c() {
// wir wollen alle variablen haben
$data = data::getAll();
foreach ($data as $name => $value) {
$$name = $value;
}
// $header und $footer sind ab jetzt in dieser function verfügbar
} |
|
__________________ ~~~ ihr seid alle krank! ~~~
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von davil: 31.03.2008 14:12.
|
|
31.03.2008 14:06 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von davil am 31.03.2008 um 14:06 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
Ebay
 |
|
|
|
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
Themenstarter
 |
|
Die Antwort kommt auf keinen Fall zu spät. Das Projekt wo ich das nutzen wollte bzw. auch schon nutze habe ich aufgrund von akutem Zeitmangel noch gar nicht großartig weiter entwickelt. Es läuft zwar so wie ich mir das dachte (mehr oder weniger) gut aber ich teste das dennoch mal. Jedes mal wenn ich bloß eine Seite erweitern möchte muss ich dran denken restlos alle Funktionen anzupassen und vor allem auch prüfen das ich keine Variablen doppelt verwende und so.
Sobald ich dazu komme werd ich mal ne Runde damit rum testen. Ich sollte in den nächsten Tagen auch meine Adobe Creative Suite 3 Web Premium bekommen und soweit ich gelesen habe soll der DreamWaver ja inzwischen gewaltig weiter sein auch was PHP betrifft. Mal sehen ob ich da endlich in der Lage bin vorgefertigte Codeteile anzulegen.
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
31.03.2008 19:21 |
|
|
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
Themenstarter
 |
|
Nun, also ich habe bei einem Kundenauftrag nun das gleiche Problem. Ich habe 20 Funktionen und in fast jeder Funktion muss ich die Variablen alle samt manuell globalisieren. Ändert sich nun was muss ich bei jeder Funktion überlegen ob die Variable dort globalisiert werden muss.
Die Lösung hier habe ich leider nicht so ganz verstanden. Ich schreibe mal ein Beispiel was ich habe und dann kann mir jemand der das verstanden hat bitte mal schreiben wie das aussehen müsste.
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
|
// Funktion 1
function abc($var1, $var2, $var3) {
global $glob1, $glob2, $glob3, $glob4;
// irgendwas was hier passiert
}
// Funktion 2
function def($var4, $var5, $var6) {
global $glob2, $glob4, $glob5, $glob6;
// irgendwas was hier passiert
} |
|
Wie schaffe ich es nun hier mit möglichst nur einem Aufruf einfach in beiden Funktionen alles zu globalisieren? Es spielt ja keine Rolle hauptsache ich verwende jede Variable wirklich nur für einen Zweck. Und da das gegeben ist sollte das machbar sein.
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
23.08.2008 11:52 |
|
|
Ebay
 |
|
|
|
imset
Bloody Newb

Dabei seit: 28.08.2008
Beiträge: 5
 |
|
So hallo erst mal ^^
Also ich glaub ich versteh dein Problem, das kannst du ganz einfach über 2 Wege lösen:
a) Fals dein Script noch nicht zu gigantisch ist:
Benutze doch einfach die Superglobale $GLOBALS. Das ist ein Array von dem aus du jede Variable deines Scripts z.B. in Funktionen global aufrufen kannst. Hier ne Beschreibung .http://us2.php.net/manual/de/reserved.variables.globals.php
b) Fals dein Script zu groß ist als das es sich lohnen würde alles zu ändern:
Beschäftige dich mal mit der OOP(objekt orientierten programierung) von PHP, da solltest du solche Probleme erst garnicht bekommen.
.http://www.php.net/manual/de/language.oop5.php
|
|
28.08.2008 01:02 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von imset am 28.08.2008 um 01:02 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
Prometheus
Administrator

Dabei seit: 09.05.2003
Beiträge: 2.938
Themenstarter
 |
|
Also das mit der Superglobalen ist echt ne geniale Sache. Hatte gar nicht gewusst, dass es sowas gibt. Mein Skript ist zwar doch schon ganz schon angewachsen aber ich nutze den Dreamwaver CS3 und kann alle Dateien laden und übergreifen mit Suchen und Ersetzen arbeiten. Sollte also insgesamt recht schnell gehen.
Das mit dem OOP hab ich schon länger vor aber bin noch nicht recht dazu gekommen. Grundlagen hab ich davon ja aber wenn man PHP in Version 3.x gelernt hat fehlen einem leider so mansche Dinge die jetzt in V5 möglich sind.
EDIT:
Nun, ich habe grade schon das erste Problem festgestellt beim Anwenden von $Golbals. Ich habe eine Funktion welche einen mini Templateparser darstellt. Das heißt ich übergebe das gewünschte Template und die Funktion ließt dieses nun ein und evaluiert es und ich bekomme das Ergebnis als return welches ich dann wiederum per echo ausgebe. Ich habe nun als Beispiel eine Variable $OuterTableWidth welche in einer Datei "settings.inc.php" festgelegt wird. Wie wende ich denn $Globals an, wenn in der Funktion mit der Variable gar nicht gearbeitet wird allerdings im entsprechenden Template? Muss ich dann in jedem Template alles umschreiben und $GLOBALS[OuterTableWidth] angeben oder wie ist es dann absolut korrekt?
__________________
mfg Prometheus
|
|
|
Ich gebe keinen Support per PN, Email oder sonstiges!
Alle Fragen können offen hier im Forum behandelt werden.
|
|
|
28.08.2008 08:32 |
|
|
Google
 |
|
|
|
imset
Bloody Newb

Dabei seit: 28.08.2008
Beiträge: 5
 |
|
Versteh deine Problematik leider grad nicht so ganz, vieleicht kann ich dir aber weiterhelfen wenn du mal den Code dazu postest
|
|
28.08.2008 13:48 |
|
|
Der Betreiber und die Moderatoren vom www.coder-board.de distanzieren sich hiermit ausdrücklich von dem von imset am 28.08.2008 um 13:48 verfassten Beitrag. Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung unter Berücksichtigung der dort aufgeführten Möglichkeiten.
|
|
|
|
 |
|