PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Globale variablen?


web
14.01.2008, 11:00:50
Hi,

ich habe 2 Skripte in denen ich auf deine datenbank zu greife.


a.php
var $conIP = "localhost";
var $conUser = "111";
var $conPW = "111";
var $conDbk = "11";
mysql_connect($this->conIP, $this->conUser , $this->conPW) or die("Could not connect: " . mysql_error());

b.php:
var $conIP = "localhost";
var $conUser = "111";
var $conPW = "111";
var $conDbk = "11";


Jetzt möchte ich die Verbingungsdaten in einer dritten datei speichern. wie greife ich von den 2 dateien auf die login daten zu?


zusatzfrage: möchte ich jetzt auf einen "fremden" server zugreifen, kann man dann unter var $conIP = "localhost"; sowas angeben?
var $conIP = "http/www.test.de:80"; mit der protangabe inkl.?

knight1
14.01.2008, 11:11:43
Hallo web,
du gehst einfach hin und bindest eine dieser Dateien per include(); in Deine dritte Datei ein.

Das kann dann zum Beispiel so aussehen:

<?
include ("PFAD/a.php");
?>


Das Wort PFAD musst Du dann durch den tatsächlichen Verzeichnispfad ersetzen, je nach dem in welchem Verzeichnis die beiden anderen Dateien sich befinden.

Nach dem Aufruf der include-Funktion kannst Du alle innerhalb der eingebundenen Datei stattfinden Rückgaben nutzen. Das schliest Variablen, Arrays, Konstanten sowie Rückgabewerte von Funktionen und Klassen usw.


Ich hoffe ich habe einigermaßen verständlich erklärt.


Kai aka Knight1

web
14.01.2008, 11:18:36
genau so gings nämlich irgendwie nicht:
login.php:
<?php
var $conIP = "11";
var $conUser = "11";
var $conPW = "11";
var $conDbk = "111";
?>



Parse error: parse error, unexpected T_VAR in login.php on line 2

rambi
14.01.2008, 13:00:31
Ach ein unerwartetes T_VAR....
Das mach das Var doch da weg!!
(Ein Blick ins Handbuch würde nicht schaden...)

web
14.01.2008, 13:50:04
Bereits getan. Die Variable wird aber in a/b.php in einer klasse verwendet und ist da nicht existent.
übergebe ich sie dort in beiden dateien per "var $conIP = $conIP;"
kommt auch in einer von a.php/b.php eine fehlermeldung:
Parse error: parse error, unexpected T_VARIABLE

Opendix
14.01.2008, 14:24:09
dann zeig mal das ganze Script!

btw. var ist veraltet... benutze public/protected/private (ausser du bist gezwungen PHP4 zu benutzen...)

meikel (†)
14.01.2008, 15:41:27
Bereits getan. Die Variable wird aber in a/b.php in einer klasse verwendet und ist da nicht existent.
Ich vermute mal (nach einem tiefen Blick in die Glaskugel), Du versuchst sowas:
<?php
class a
{
include 'var.php';
function a()
{
...
?>
Falls ja:
da hat PHP grundsätzlich was dagegen. Innerhalb einer Klasse sind include/require ausschließlich nur innerhalb der Methoden gestattet.

web
14.01.2008, 16:33:22
login.php

<?php
$conIP = "l11";
$conUser = "1";
$conPW = "1";
$conDbk = "1";
?>


a.php u b.php


include("login.php");

class dings {


function DataUpdate(dcdl) {
...
}


function DataUpdate(dcdl) {
...
}

function blaaa() {

// Datenbank-Aufruf
mysql_connect($this->conIP, $this->conUser , $this->conPW) or die("Could not connect: " . mysql_error());
mysql_select_db($this->conDbk);



}

knight1
14.01.2008, 19:04:23
login.php

<?php
$conIP = "l11";
$conUser = "1";
$conPW = "1";
$conDbk = "1";
?>


a.php u b.php


include("login.php");

class dings {


function DataUpdate(dcdl) {
...
}


function DataUpdate(dcdl) {
...
}

function blaaa() {

// Datenbank-Aufruf
mysql_connect($this->conIP, $this->conUser , $this->conPW) or die("Could not connect: " . mysql_error());
mysql_select_db($this->conDbk);



}







1. Warum deklarierst Du zweimal dieselbe Funktion DataUpdate innerhalb der Klasse dings?

2. Die Variablen kannst Du über das Superglobale Array $GLOBALS ansprechen. Also $GLOBALS['conIP'], $GLOBALS['conUser'], $GLOBALS['conPW'] und $GLOBALS['conDbk']. Genauso geht das mit allen anderen Variablen welche ausserhalb einer Funktion oder Klasse definiert wurden bzw. innerhalb einer solchen definiert werden und um Sie für ausserhalb zugänglich zumachen.


Kai aka Knight1

web
15.01.2008, 09:16:59
1. weils ein beispiel war.

2. Ansprechen über $GLOBALS['conIP']?
Und deklarieren weiterhin über $conIP = "11";?

The Serious Sam
15.01.2008, 16:31:46
benutz einfach global



function xyz() {
global $conIP;
//...

}

knight1
16.01.2008, 01:26:14
...2. Ansprechen über $GLOBALS['conIP']?
Und deklarieren weiterhin über $conIP = "11";?

Sorry, hatte ich vergessen zu schreiben.

Wenn Du eine Variable innerhalb einer Funktion oder Klasse definierst und diese dann auch ausserhalb davon nutzen möchtest musst Du sie auch über $GLOBALS definieren.

Wenn Du eine Variable ausserhalb von Funktionen definierst kannst Du sie auch ohne $GLOBALS definieren, musst sie allerdings dann innerhalb einer Funktion oder Klasse mit $GLOBALS ansprechen.


Kai aka Knight1

Opendix
16.01.2008, 02:12:03
Wenn Du eine Variable innerhalb einer Funktion oder Klasse definierst und diese dann auch ausserhalb davon nutzen möchtest musst Du sie auch über $GLOBALS definieren.


Pfui... sowas macht man so:


class TestKlasse
{
//Deklarieren deiner Variabel
private $variabel = 'Deine Variabel';

//Getter-Funktion über die du Lese-Zugriff auf die Variabel erhälst
public function GetVariabel()
{
return $this -> variabel;
}

//Setter-Funktion über die du Schreib-Zugriff auf die Variabel erhälst..
public function SetVariabel($value)
{
$this -> variabel = $value;
}
}


$instance = new TestKlasse(); //Instanz der Klasse erstellen
echo $instance -> GetVariabel(); //Ausgabe der Variabel -> "Deine Variabel" wird ausgegeben
$instance -> SetVariabel('blub');//Der Variabel einen neuen Wert zuweisen
echo $instance -> GetVariabel(); //Ausgabe der Variabel -> "blub" wird ausgegeben

web
16.01.2008, 09:50:00
sieht ja alles super aus, aber funktionieren tut davon wenig.

vllt wendet ihr das mal auf mein beispiel an. nochmal:

login.php: hier sollen die Variablen definiert werden.
<?php


$conIP = "11";
$conUser = "11";
$conPW = "11";
$conDbk = "11";



?>



a.php und b.php:
hier sollen diese variablen existent sein.
<?php


inculde login.php

class TestKlasse
{
zugriff auf
$conIP;
$conUser ;
$conPW ;
$conDbk;

}



?>

feuervogel
16.01.2008, 09:57:20
Ich möchte mich hier mal zwischenschalten: Von der Verwendung von global ist dringend abzuraten, es führt zu unübersichtlichem und schlechten Code.

rambi
16.01.2008, 11:25:17
Ich würde mir dazu eine RegistryKlasse basteln. Oder oder direkt das Singleton Pattern implementieren.

knight1
16.01.2008, 15:28:44
sieht ja alles super aus, aber funktionieren tut davon wenig.

vllt wendet ihr das mal auf mein beispiel an. nochmal:

login.php: hier sollen die Variablen definiert werden.
<?php


$conIP = "11";
$conUser = "11";
$conPW = "11";
$conDbk = "11";



?>



a.php und b.php:
hier sollen diese variablen existent sein.
<?php


inculde login.php

class TestKlasse
{
zugriff auf
$conIP;
$conUser ;
$conPW ;
$conDbk;

}



?>

Das mit der Definition steht ja schon.
Hier mal mein ansatz:

<?php


inculde login.php

class TestKlasse
{
zugriff auf
$GLOBALS['conIP'];
$GLOBALS['conUser'];
$GLOBALS['conPW'];
$GLOBALS['conDbk'];

}



?>


Kai aka Knight1

rambi
16.01.2008, 16:12:48
Ich finde globale Variablen unnötig....

Irgendwo habe ich noch eine rudimentäre DB Klasse rumliegen, die mit Hilfe einer "Singleton Factory" Kombination erzeugt wird.
Kann ich dir auf Wunsch posten, ist wirklich unvollständig. Aber funktionsfähig.

Beschäftige dich besser mit PDO und doctrine

web
17.01.2008, 15:23:05
<?php


inculde login.php

class TestKlasse
{
mysql_connect($this->$GLOBALS['conIP'], $this->$GLOBALS['conUser'] , $this->$GLOBALS['conPW']) or die("Could not connect: " . mysql_error());
mysql_select_db($this->$GLOBALS['conDbk']);
}



?>


klappt nicht!

rambi
17.01.2008, 15:28:39
Das wundert mich nicht....
Aus welchen Buch hast du das denn: $this->$GLOBALS['conIP']
Bestimmt nicht aus dem PHP Handbuch!!

Und wenn diese lustige Idee deine sein sollte, dann vergiss sie mal schnell wieder. Das $this-> ist an der Stelle mehr als überflüssig.

knight1
18.01.2008, 12:20:35
<?php


inculde login.php

class TestKlasse
{
mysql_connect($this->$GLOBALS['conIP'], $this->$GLOBALS['conUser'] , $this->$GLOBALS['conPW']) or die("Could not connect: " . mysql_error());
mysql_select_db($this->$GLOBALS['conDbk']);
}



?>


klappt nicht!

Ohne $this

$this bezieht sich suf Objekte und Variablen innerhalb einer Klasse. Du definierst die Variablen aber außerhalb.


Kai aka Knight1