zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Lokale und globale Variablen und Konstanten

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 25.09.2010, 14:17
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.391
AndreasB wird schon bald berühmt werden
Standard Lokale und globale Variablen und Konstanten

Mir fehlt offenbar noch das Verständnis zum korrekten Umgang mit lokalen und globalen Variablen bzw. Konstanten.

PHP-Code:
<?php 
//audio
    
$music_dir="/music/";
    
$music_file_ext=".mp3";
    function 
ml($number) {
        global 
$music_dir;
        global 
$music_file_ext;
        echo 
'<a href="' $music_dir .  $number $music_file_ext '">' $number '</a>';
        }
?>
<p>Lorem ipsum <?php ml("135-1"?></p>
Wenn ich es richtig verstanden habe, endet der Geltungsbereich einer Variablen, die vor einer Funktion gesetzt wurde, mit dem Beginn der Funktion.
Wenn man dennoch auf die Variable zugreifen möchte, muss man z.B. mit dem Schlüsselwort "global" den Geltungsbereich der Variable ändern. Und zwar in jeder Funktion erneut.

Leider gibt es offenbar Umstände, die trotz des Codes wie im Beispiel oben, dazu führen, dass die als global deklarierten Variablen nicht ausgegeben werden.
Ich konnte den Code auf einer realen Seite noch nicht auf ein sinnvolles Testcase eindampfen um der Ursache so auf den Grund zu gehen.

Frage: Habt ihr vielleicht einen Hinweis für mich, welche "Prozesse" potentiell dazu führen, dass eine als global deklarierte Variable in einer Funktion nicht ausgegeben wird?

Und davon unabhängig:
Wäre es besser, für das Musikverzeichnis und die Dateierweiterung, die sich ja nicht ändern, eine Konstante zu deklarieren (deren Geltungsbereich automatisch global ist)?

Gilt es als sauberer Programmierstil, einen Wert immer als Konstante zu deklarieren, wenn er nicht durch Skripte geändert wird und weiterhin mehr als einmal vorkommt.

Aber dann dürfte man z.B. auf mehrsprachigen Seiten die Übersetzungsstrings auch nicht als Variable deklarieren.
Denn die Strings werden ja durch kein Skript geändert. Sie werden ein einziges Mal manuell eingetragen und fertig.
__________________


Geändert von AndreasB (25.09.2010 um 16:50 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 25.09.2010, 17:16
Benutzer
neuer user
 
Registriert seit: 01.02.2010
Ort: Berlin
Beiträge: 49
webdecker wird schon bald berühmt werden
Standard

Anmerkungen

Welche Prozesse...?
Es könnte sein, dass deine globale Variabte woanders geändert wurde uns dan in deiner eigentlichen Funktion leer ist. Ggf. in der Funktion ein var_dump($GLOBALS) machen und schauen, ob deine Variable z.B. deklariert aber leer ist.

Konstante oder nicht?
Meine Meinung: Konstanten für ganz grundlegende Dinge. Pfade und Co sehe ich eher als Konfigurationsvariable an. Denkbar und einfach wäre z.B., Du würdest für all solche Konfigurationen ein Array in $GLOBALS einführen, also greifst Du lesend und schreibung immer auf $GLOBALS['myconfig']['music_dir'] zu. So hast Du zumindest jederzeit einen Überblick, was zurzeit als globale Konfiguration deiner Website da ist. (By the way, aus 'myconfig' würde ich dagegen eine Konstante machen.)

Bei Übersetzungen:
Klar, das geht nicht als Konstante. Da bietet sich an, eine Klasse oder funktion zu schreiben, die zu einem Key und dem Spachcode die entsprechende Übersetzung liefert. Und die kann wiederum in einem globalen Array analog zur Konfiguration oben liegen und/oder in sprachspezifischen Text-Files (csv, ini) oder der Datenbank...
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 25.09.2010, 17:51
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.391
AndreasB wird schon bald berühmt werden
Standard

Zitat:
Zitat von webdecker Beitrag anzeigen

Konstante oder nicht?
Meine Meinung: Konstanten für ganz grundlegende Dinge. Pfade und Co sehe ich eher als Konfigurationsvariable an.
Hhmm.
"Grundlegend" erscheint mir nicht als Definition geeignet.

Was spricht denn gegen die Deklaration als Konstante?
Wie wird sowas in höheren Programmiersprachen gehandhabt?
__________________

Mit Zitat antworten
  #4 (permalink)  
Alt 25.09.2010, 18:36
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AndreasB Beitrag anzeigen
Was spricht denn gegen die Deklaration als Konstante?
Das du sie nicht mehr ändern kannst. Und mit grundlegend meint er glaub ich, so Sachen wie Eintellugen, Pfade...

LG rs-web
__________________
Small boy wrote to Santa Claus:"Send me a brother!" Santa wrote back: "Send me your mother"
Mit Zitat antworten
  #5 (permalink)  
Alt 25.09.2010, 18:50
Benutzer
neuer user
 
Registriert seit: 01.02.2010
Ort: Berlin
Beiträge: 49
webdecker wird schon bald berühmt werden
Standard

Zum Teil, denke ich, es ist ne Art Geschmackssache bzw. ne philosophische Frage, wann Konstante, wann nicht.

"Konstante" sagt ja, dass etwas konstant bleibt (z.B. Log-Level, Error-Level, Wurzelverzeichnis der Applikation, Typen von irgendwas...).

Ob jetzt ein Pfad zu einem mp3-Verzeichnis als Konstante oder Konfigurationsvariable definiert wird, da fängt sicher die Philosophie an. Wenn der Pfad ein absoluter ist, ist es sicher eher eine Variable (nämlich z.B. "halb-dynamisch", abhängig vom Docroot), wenn es ein Pfad relativ zum Docroot oder sonstwas ist, könnte es auch eine Konstante sein...

Manche PHP-Frameworks sehen ja eine bestimmte Verzeichnisstruktur vor und die einzelnen Komponenten verlassen sich darauf, dass bestimmte Dinge an bestimmten Stellen gefunden werden (Pfade relativ zu einem Wurzelverzeichnis). Da können Konstanten Sinn machen.


PHP 5 ist m.E. mit seiner Objektorientierung eine recht hohe Programmiersprache. In eine Java-basierten Webapplikation würde ich aber das eben gesagte ebenfalls gelten lassen. Es kommt drauf an...
Mit Zitat antworten
  #6 (permalink)  
Alt 25.09.2010, 19:03
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.391
AndreasB wird schon bald berühmt werden
Standard

Zitat:
Zitat von rs-web Beitrag anzeigen
Das du sie nicht mehr ändern kannst.
Ich schon

Ich hatte den Charakter einer Konstanten so verstanden, dass sie von einem Skript nicht verändert wird.
So ähnlich lautet auch die Definition in
Konstante (Programmierung) ? Wikipedia
__________________

Mit Zitat antworten
  #7 (permalink)  
Alt 25.09.2010, 20:29
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AndreasB Beitrag anzeigen
Ich schon
Wie meinen?

PHP-Code:
<?php
define
('ABC''Nummer eins');
define('ABC''Nummer zwei');

echo 
ABC;
?>
Ergibt 'Nummer eins' als Ausgabe und wahrscheinlich nen Error...

LG rs-web
__________________
Small boy wrote to Santa Claus:"Send me a brother!" Santa wrote back: "Send me your mother"
Mit Zitat antworten
  #8 (permalink)  
Alt 26.09.2010, 00:51
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.391
AndreasB wird schon bald berühmt werden
Standard

@rs-web

Ich meinte damit "Der Programmierer kann den Wert der Konstante ändern, ein Skript nicht".

Kurz: mir leuchtet noch nicht ein, was gegen die Verwendung von Konstanten im Sinne von "Eine Konstante ist ein Wert, der sich während der Laufzeit des Programms nicht ändert, nicht ändern kann und nicht ändern soll." spricht.
__________________

Mit Zitat antworten
  #9 (permalink)  
Alt 26.09.2010, 16:27
Benutzerbild von stravid
Human Compiler
XHTMLforum-Mitglied
 
Registriert seit: 16.01.2008
Ort: Austria
Beiträge: 186
stravid befindet sich auf einem aufstrebenden Ast
Standard

Ist der Wert Konstant und wird nicht von Eingabeparametern bestimmt ist es eine Konstante, also macht man es auch zu einer Konstante.
__________________
David Strauß - stravid.com
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 26.09.2010, 16:49
Benutzerbild von AndreasB
Erfahrener Benutzer
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 29.11.2005
Beiträge: 1.391
AndreasB wird schon bald berühmt werden
Standard

Zitat:
Zitat von HEXMACHINE Beitrag anzeigen
Ist der Wert Konstant und wird nicht von Eingabeparametern bestimmt ist es eine Konstante, also macht man es auch zu einer Konstante.
Wie definierst Du bitte im Zusammenhang von Programmiersprachen "Eingabeparameter"?

Sind das nicht Variablen?
__________________

Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Test auf Umlaute Scheppertreiber Javascript & Ajax 16 06.11.2009 09:49
globale variablen kampfgnom Javascript & Ajax 58 20.05.2009 14:05
Variablen erzeugen Server-Probleme [gelöst!] heiko_rs Serveradministration und serverseitige Scripte 15 18.03.2006 15:08
Von includes und unbekannte Variablen betrazivis Serveradministration und serverseitige Scripte 4 30.08.2005 14:21


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:36 Uhr.