• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

simple function Frage

Status
Für weitere Antworten geschlossen.
Werbung:
du meinst so etwas?
[php:1:6a7a0d50a6]
<?php
function foo() { echo $bla; }
$bla = 'foobar'
foo();
[/php:1:6a7a0d50a6]
das liegt daran das die variable $bla im globalen namespace liegt, die funktion aber einen eigenen namespace hat.
du solltest einer funktion immer uebergeben was sie benoetigt:
[php:1:6a7a0d50a6]
<?php
function foo($bar) { echo $bar; }
$bla = 'foo';
foo($bar);
?>
[/php:1:6a7a0d50a6]
(es ist moeglich dieses mit global zu umgehen -> aber unschoen)
wenn du viele funktionen mit einer gleichen variable brauchst nimm halt eine klasse.
 
Ne, ich hab nur eine Function. Es rentiert sich nicht eine Klasse zu verwenden.
Allerdings muss ich diese Funktion in vielen Scripten aufrufen und ich will da jetz nich überall die blöde $var übergeben >.<
 
Werbung:
dafuer ist die funktion nunmal da das man ihr irgendwelche sachen uebergibt ;)
 
Mach die Variable global verfügbar. Oder habe ich Dich falsch verstanden?
 
Werbung:
Hat ja auch niemand was Anderes behauptet. Wenn er die Variable aber nicht ständig als Parameter übergeben will wird ihm nicht viel anderes übrig bleiben!
 
naja ich habs schon geändert aber das mit der globalen $var würd mich trotzdem interessieren.
wie geht das?
global $var;
oder wie?

Was is daran so schlimm, unsauber?
 
Werbung:
$GLOBALS, ohne Unterstrich.

Es ist genau das gleiche Problem. Wie gesagt. Wenn Du die Variable nicht als Parameter übergeben möchtest bleibt Dir nichts anderes übrig ;).


EDIT:
Wenn man bedacht damit umgeht ist das natürlich auch kein Problem. Nur, wenn man das ausnutzt, um dann letztlich nur noch mit "global" zu arbeiten ist es eben unsauber.
 
Werbung:
Mal ne andere Frage:
Ich hab schon lange ne MySQL Klasse. Nun muss ich aber manchmal in Funktionen einen MySQLQuery starten. Das geht natürlich nicht über die Klasse, weil ja die Funktion einen internen Namenscache hat...
Deswegen hab ich da einfach mysql_query(); benutzt, weil die Verbindung ja trotzdem bestand. Weil ich das aber nich unbedingt schön finde, hab ich mich gefragt, ob man das nich noch anders lösen kann und mir is grad die Idee gekommen, dass ich doch eigentlich die Klasse mithilfe von $GLOBAL['dbConn'] benutzen könnte. Geht das?
 
hm, aber meine Klasse is noch in PHP 4 geschrieben...
Und PHP 5 unterstützen ja noch nicht alle Webserver und für ein Projekt brauch ich die Klasse in PHP 4.
 
Werbung:
Ich verstehe gerade nicht, was Du machen willst.
Die Verbindung zur Datenbank besteht doch eh, nachdem Du sie erstellt hast. Wozu brauchst Du dann $GLOBALS['dbConn']?
 
er will auf die fähigkeiten seiner mysql klasse zuruückgreifen und nicht direkt mit der mysql erweiterung arbeiten. bei mir ist das eigentlich alles in klassen die ueber $this->db zugriff auf eine einzige instanz der mysql klasse zugriff haben ;) wenn du aber mit normalen funktionen arbeiten willst machs mit $GLOBALS -> ist ja fuer einen sehr speziellen und oft benutzen zweck
 
Werbung:
nein die wird einfach immer im konstruktor gesetzt.

[php:1:33f697b507]
protected function __construct(Mysql &$db) {
$this->db = $db;
}
[/php:1:33f697b507]
in meiner Main Klasse habe ich dann ein
[php:1:33f697b507]
$this->db = new Mysql();
[/php:1:33f697b507]
und sämtliche anderen klassen werden dann mit
[php:1:33f697b507]
$bla = new FooBar($this->db);
[/php:1:33f697b507]
instanziert. so mache ich das auch mit meiner User klasse :) so habe ich jederzeit direkten zugriff auf die datenbank und die user berechtigungen
 
niklasboelter schrieb:
er will auf die fähigkeiten seiner mysql klasse zuruückgreifen und nicht direkt mit der mysql erweiterung arbeiten.
Und was hat das mit $GLOBALS zu tun?
Nunja, macht ihr mal 8) :lol:
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben