php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.01.2012, 23:54  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard $globals

Hallo,

ich suche nach einer Möglichkeit, bestimmte Daten "einfach" zugänglich zu machen für Code, unabhängig des Scopes (ohne das "global" Keyword bemühen zu müssen) und jedem "Code-Inspector" klar darzustellen, dass hier auf eine globale Info zugegriffen wird.

Es handelt sich dabei um "Grund"eigenschaften des Systems (z.B. Servertype, Ports, Netzwerkumgebung, angeschlossene Devices etc.).

Dies könnte ich in (mehrere) Environment Variablen schreiben, um diese Infos so via $_ENV, was ja eine Superglobale ist, überall zugänglich zu haben, was auch die Art dieser Informationen am ehesten reflektiert.

Leider ist das (in meime Falle) nicht ganz tauglich, weil es sich teilweise um Informationen handelt, die sich laufzeit-spezifisch ändern können, z.B. das Vorhandensein einer Device. $_Env wird aber nur im Falle des Restart des Wirtssystems aktualisiert und reflektiert damit nicht zwangsläufig die Situation zur Laufzeit.

Ausserdem kann ich so keine Arrays in $_ENV erzeugen (?? mein Kenntnisstand).

Nun könnte ich bestimmte, ggf. kritische Werte checken und in $_ENV updaten, z.B. in der Autoprepend und ggf. sogar Werte in ein (laufzeit-statisches, neues) Array in $_ENV schreiben

Frage 1:
Was spricht aus Sicht der Profis gegen so etwas (ausser vielleicht Namenskollissionen mit bestehenden ENV Variablen und mangelnde Kapselung, was aber ja gerade gewünscht ist)?


Frage 2:
Was wäre eine probate Alternative?

Danke für Eure Tips
jwka61
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.01.2012, 00:07  
php.de
Gast
 
Beiträge: n/a
Standard

Hört sich irgendwie nach Resourcen - Dependency Injection an.

Du fragst also irgendwelche Daten deines PCs ab, wenn ich das richtig verstanden habe. Der PC stellt eine Resource dar. Wenn man mit Resourcen arbeitet, sollte man auch mit Dependency Injection arbeiten. Und zwar aus Gründen der Flexibilität. Z. B. in Zusammenhang mit Unit-Tests.

Man definiert also eine Klasse, die alle Daten des PCs aufnimmt. Und dessen Instanzen übergibt man dann entweder dem Konstruktor oder einer setter-Methode irgendwelcher anderer Objekte, die diese Informationen benötigen.
  Mit Zitat antworten
Alt 17.01.2012, 00:15  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von jwka61 Beitrag anzeigen
Frage 1:
Was spricht aus Sicht der Profis gegen so etwas (ausser vielleicht Namenskollissionen mit bestehenden ENV Variablen und mangelnde Kapselung, was aber ja gerade gewünscht ist)?
Das $_ENV Array ist für solche Zwecke "Umgebungsvariablen" gedacht, wozu vorhandene Geräte ja gehören. Ob eine Modifikation zur Scriptlaufzeit vorgesehen ist, kann man dir wohl schlecht beantworten. Möglich ist es.

Zitat:
Zitat von jwka61 Beitrag anzeigen
Frage 2:
Was wäre eine probate Alternative?
Das Superglobale Array $_GLOBALS. Dort kannst du auf globale Variablen zugreifen ohne das Schlüsselwort "global" bemühen zu müssen.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 17.01.2012, 00:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Das Superglobale Array $_GLOBALS.
Warum auch immer - das Array heißt $GLOBALS.


Aber, @TE: Vielleicht erzählst Du etwas mehr zum Hintergrund. Ich bin sicher, es gibt elegantere Lösungen. Und wenn sie auch nur aus einem Objekt mit Singleton-Zugrif bestehen sollte.

[edit]
Hüstel, ok, hatte übersehen, wer den Thread eröffnet hat.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 17.01.2012, 00:37  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Warum auch immer - das Array heißt $GLOBALS.
Ich benutze es nie und bin daher davon ausgegangen das es wie alle Superglobalen auch den _ hat.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 17.01.2012, 01:17  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von jwka61 Beitrag anzeigen
Nun könnte ich bestimmte, ggf. kritische Werte checken und in $_ENV updaten, z.B. in der Autoprepend und ggf. sogar Werte in ein (laufzeit-statisches, neues) Array in $_ENV schreiben

Frage 1:
Was spricht aus Sicht der Profis gegen so etwas (ausser vielleicht Namenskollissionen mit bestehenden ENV Variablen und mangelnde Kapselung, was aber ja gerade gewünscht ist)?


Frage 2:
Was wäre eine probate Alternative?

Danke für Eure Tips
jwka61
1) Kollision ist das geringste Problem, kapsel deine Variable einfach in einem Scope. Generell kann man dafür eine Funktion benutzen. Der handhabbarkeit sollte man die oberste Ebene des gespeicherten Arrays in ein objekt casten, damit man nicht erst das resultat der funktion einer Variable zuweisen muss. Außerdem sollte das resultat der Funktion als referenz dienen, so ist der inbound und der outbound weg gewährleistet:

PHP-Code:
function &globalInfo ( array $initArray null ) {
   static 
$data;
   if ( !
is_null$initArray ) && is_null($data) ) 
      
$data = (object)$initArray;
   return 
$data;

Im Bootstrap der Scripts bereitest du die function vor, setzt bestimmte Initiale Array-Items, ect.
PHP-Code:
globalInfo(array('a' => 1'b' => 2)); 
Später handhabst du dann einfach die funktion als Instanzhalter und die erste Ebene als Properties:
PHP-Code:
echo globalInfo()->a// -> 1 
PHP-Code:
globalInfo()->1000;
echo 
globalInfo()->a// -> 1000 
2) Memcache wäre die alternative, ein echtes Singleton eine weitere, GLOBALS-Superglobale halte ich für unheimlich unübersichtlich, da doch lieber ein ArrayObject-Konstrukt das das Singleton-Pattern realisiert hat. Temporäre In-Memory tabellen eine andere.

@nikosch: haha.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (17.01.2012 um 01:22 Uhr).
tr0y ist offline   Mit Zitat antworten
Alt 17.01.2012, 09:32  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Antworten.

Scheint so, als müsste ich das "auf später" verschieben, wenn ich mit OO für PHP soweit bin.

Ich habe dazu allerdings ein paar grundsätzliche (die auch speziell für meine Anwendungsumgebung sehr relevant sind) Fragen die ich noch in einem eigenen Thread poste.

jwka61
[EDIT]
Da mir immer wieder mal gesagt wird, ich solle mehr Hintergrund liefern: Wo wäre denn die geeignete Stelle, um ein wenig mehr über das verwendete System und die (m.E) bestehenedne Besonderheiten zu beschreiben? Sowas wie einen Vorstellungs-Bereich gibt es ja nicht.
[/EDIT]
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.

Geändert von jwka61 (17.01.2012 um 09:41 Uhr).
jwka61 ist offline   Mit Zitat antworten
Alt 17.01.2012, 10:48  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Im Zweifelsfall im Off-Topic, denke ich ^^
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 17.01.2012, 18:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Yepp
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 17.01.2012, 19:48  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Das $_ENV Array ist für solche Zwecke "Umgebungsvariablen" gedacht, wozu vorhandene Geräte ja gehören. Ob eine Modifikation zur Scriptlaufzeit vorgesehen ist, kann man dir wohl schlecht beantworten. Möglich ist es.
1. meines Wissens wird $_ENV wird beim Start generiert.
2. Array is Array. Natürlich kann man auch in dieses Array zusätzlichen Schmodder reinschreiben. Ich selbst vergewaltige dazu allerdings das $_SERVER Array.

Zitat:
Das Superglobale Array $_GLOBALS.
Schön wärs:
http://mod.php.developer.vc/_GLOBALS/
Du meinst $GLOBALS

Geändert von meikel (17.01.2012 um 19:51 Uhr).
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Arraynamen ausgeben lassen in Foreach dreamcatcher PHP Einsteiger 4 09.04.2011 10:45
$GLOBALS, welche in DB gespeichert ist, als Variabel ausgeben und nicht als String beta02 PHP Tipps 2009 29 01.04.2009 22:08
Verwendung von $GLOBALS DutziMan PHP-Fortgeschrittene 16 01.09.2004 10:00
[Erledigt] Unterschiede in Sessions PHP-Fortgeschrittene 39 19.08.2004 23:52
static vs global vs $GLOBALS Chance PHP-Fortgeschrittene 19 10.08.2004 00:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php $_globals, besonderheit superglobale variablen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum