php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.03.2007, 07:35  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard Globalisierungsprobleme in einer Funktion

Moin moin,

habe da mal ein kleines Problem:

Also ich habe ein Array mit dem ich arbeite, dann möchte ich eine Funktion aufrufen und in dieser mit dem Array weiter arbeiten! Also dachte ich mir so, dann deklariere ich die Variable doch einfach in meiner Funktion als global, aber irgendwie irgendwie macht er das nicht!

Theoretischer Aufbau:
PHP-Code:
function test() {
   global 
$meinarray;
   echo 
$meinarray;
}

echo 
$meinarray;
test();
echo 
$meinarray
So ist das aufgebaut! Wobei ich vielleicht auch noch erwähnen sollte, dass das alles auch in einer Funktion geschiet, vielleicht hat das ja auch irgendwelche Auswirkungen! Naja, ich dachte nun, wenn ich mir den Quellcode so ansehe, dann müsste ich als Ausgabe 3 mal "array" da stehen haben, aber leider erscheint es nur 2 mal!

Was mache ich denn bitte falsch?

Vielen Dank schonmal
Borlox
Borlox ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.03.2007, 09:08  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

versprich mir nachzuschauen, was die eigentlichen probleme der globalisierung sind.

zu deinem problem:
* globals sind schei*se
* verwende keine globals.
* punkt.

du kannst ein array als parameter weiterreichen.

PHP-Code:
<?php
function foo($bar) { // beim methodeneintritt hast du eine _kopie_ des arrays.
  
$bar['foo'] = rand();
  
var_dump($bar);
}

function 
bar(&$foo) {  // per referenz übergeben: objekt ausserhalb wird veraendert.
   
$foo['bar'] = rand();
   
var_dump($foo);
   
foo($foo);  // funktion aufrufen
}
$array = array(
  
'fasdf' => 'asdf',
);
var_dump($array);
foo($array);
var_dump($array);
bar($array);
var_dump($array);

grüße
axo
axo ist offline  
Alt 01.03.2007, 09:34  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard

Hi axo,

erstmal vielen Dank! Mit dem & vor der Variable habe ich es endlich hinbekommen! Hatte auch schonmal versucht die Variable mit zu übergeben, aber ohne das & hat das auch nicht geklappt!

Und nachdem ich nun auch noch ne ganze Menge über die allgemeinen Globalisierungsprobleme gelernt habe, kann ich nun endlich wieder etwas arbeiten gehen!

Schönen Tag noch
Borlox
Borlox ist offline  
Alt 01.03.2007, 10:47  
Erfahrener Benutzer
 
Registriert seit: 02.08.2004
Beiträge: 472
duderino
Standard

Sorry dass ich jetzt so dumm frage, aber wieso sollte man keine Globals in einer Funktion oder einer Klasse benutzen? Ich mein eigentlich ist das ja ganz praktisch, man muss dann schlißlich nicht alles übergeben...
duderino ist offline  
Alt 01.03.2007, 11:26  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard

Ehrlich gesagt, wüsste ich das auch gerne, da ich es in mehreren anderen Funktionen auch verwende!

Warum auch immer, dass in dieser auf einmal nicht mehr ging!

Gruß Borlox
Borlox ist offline  
Alt 01.03.2007, 11:29  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

http://www.php-faq.de/q/q-sicherheit-global.html

Ich sehe ihr habt ALLE fleißig die FAQ und Tutorials gelesen



http://de.php.net/manual/de/language...bles.scope.php

hier untern bei den Comments ein Paar Beispiele wo lokale und globale Variablen benutzt werden und sich damit überschreiben.
M3g4Star ist offline  
Alt 01.03.2007, 11:36  
Neuer Benutzer
 
Registriert seit: 16.10.2006
Beiträge: 20
mc_hammer
Standard

Desweiteren ist es keine gute Praxis, oft globale Variablen einzusetzen, egal in welcher Programmiersprache. Globale Variablen verursachen ganz schnell böse Fehler, die schwer zurückzuverfolgen sind, da jeder daran rumfummeln kann (aber eigentlich nicht sollte). Zudem vernichten sie die Wiederverwendbarkeit von Code. Kleines Beispiel:

PHP-Code:
//nicht wiederverwendbar:
function quadrat() {
  global 
$zahl;
  
$zahl $zahl*$zahl;
}

//wiederverwendbar:
function quadrat($zahl) {
  return 
$zahl*$zahl;

hat auch etwas mit dem Black-Box - Prinzip aus OOP zu tun, mehr dazu hier zum Beispiel:
http://www.flashstar.de/fla/oop.swf
mc_hammer ist offline  
Alt 01.03.2007, 12:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

mc_hammer hat schon die wichtigsten Punkte genannt.
Zitat:
[Fehler sind] schwer zurückzuverfolgen
Zitat:
Wiederverwendbarkeit
Viele sehen global ja auch als eine Art Parameter für eine Funktion.

global bietet aber keinerlei Vorteile gegenüber Parametern. Im Gegensatz dazu bieten Parameter Transparenz. Der Anwender der Funktion [1] sieht, ohne den Code der Funktion kennen zu müssen, welche Parameter die Funktion benötigt, um korrekt zu arbeiten.

mc_hammers Beispiel ist gut. Wenn ich seine 1. quadrat() Funktion nutzen möchte, müsste ich sie mir erst anschauen um festzustellen, dass er mit global $zahl arbeitet. Bei der 2. müsste ich das nicht. Ich könnte gleich loslegen und sie verwenden.

Zwei weitere Nachteile bahnen sich schon an:
Der eine mag vielleicht nicht so erscheinen, er ist aber einer:
Die Variable kann nun von der Funktion verändert werden. Von außen ist es aber weder ersichtlich noch vielleicht erwünscht, dass die Funktion still und heimlich $zahl verändert.

Eine Funktion muss klar gegliedert sein: Eingabe-Werte sind die Parameter, Ausgabe-Werte der Rückgabewert, oder, wenn es sein muss auch eine Veränderung der Parameter per Referenz.

Der zweite Nachteil ist, du bist an die Namensgebung gebunden und überhaupt nicht flexibel. Deine Variable muss $zahl heißen, sonst funktioniert deine Funktion nicht. Jetzt kommt das große Umbenennen und Kopieren der Variablen, wenn du zB noch eine Funktion wurzel() hast!

[1] Im Regelfall seid das wahrscheinlich noch ihr. Programmieren wird aber irgendwann möglicherweise mehr als nur für sich selbst zu coden. Andere kennen die Funktionsweise nämlich nicht. Außerdem erinnert man sich selbst auch nicht ewig an seinen Code
Zergling-new ist offline  
Alt 01.03.2007, 17:15  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Anders herum betrachtet gibt es keinerlei Grund wieso man globale Variablen verwenden sollte. Wirklich absolut alles lässt sich auch wesentlich angenehmer über die bereits beschriebenen Mechanism klären. Und es ist eine Fehlerqelle ohne Gleichen
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


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
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Array in rekursiver Funktion auslesen Gumfuzi PHP Tipps 2007 17 15.11.2005 12:01
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
Funktion() anwendung -bitte um Hilfe PHP Tipps 2004-2 17 08.12.2004 11:58
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
globalisierungsprobleme, lösung globalisierungsprobleme, globalisierungsproblematik, \lösungsansätze für globalisierungsprobleme\, lösungsansätze für globalisierungsprobleme, lösungsmöglichkeiten für globalisierungsprobleme, lösungen für globalisierungsprobleme, globalisierungsprobleme lösung, variable php globalisierung, globalisierung probleme, lösungsansätze für globalisierungsproblematik, globalisierung probleme lösung, lösung für das globalisierungsproblem, hausarbeitsthemen globalisierungsprobleme

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:34 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.