Gültigkeitsbereich Variable für Functions()

dataCore

Grünschnabel
Moinse bin relativ neu im Bereich 'php' und wäre froh wenn mir jemand bei folgendem Problem helfen könnte.

config.php
PHP:
<?php
	$lang = 'de';
?>

meineFunctions.php
PHP:
<?php 

//lade sitename
if(isset($_GET['site']))
	$site = $_GET['site'];

function GetHeaderPic()
{
	return  $lang.'/'.$site.'_header.jpg;
}
?>

index.php
PHP:
<?php 
	require_once ('scripts/config.php');
	require_once ('scripts/meineFunctions.php');
?>

//bliblablub seitendesign und irgendwo steht der functionsaufruf
<? php echo GetHeaderPic(); ?>

------

Soviel zur ausgangslage. Jetzt meldet mir aber PHP das beim Funktionsaufruf die Variablen $lang und $site nicht definiert sind. (Anmerkung: $site wurde in der url gesetzt = "index.php?site=sonstiges")

Irgendwie versteh ich das nicht mit dem Geltungsbereich der Variablen. Müsste nicht, solange ich mich auf index.php befinde und dort die config sowie functions lade, diese variablen für alle gelten?

Wie steht es mit der meineFunctions.php Datei? Die Variable $site die ich ausserhalb definiert habe müsste ja geladen sein. Oder muss da irgend eine form von class-wrapper drumgemacht werden

DANKE für etwaige Hilfe

greetings
dataCore
 
Die Variablen in der Function sind neue, die haben nichts mit den aus der index.php zu tun.
Entweder du arbeitest mit global $lang, $site besser ist es aber denke ich, wenn du die beiden Variablen der Funktion übergibst
 
danke für die schnelle Antwort!
d.h. variablen in Funktionen kann man nur brauchen, wenn man sie returnt.

Hab jetzt eine andere Variante verwendet und meineFunction.php als Class geschrieben.

Das funktioniert tiptop und sieht so aus (mit kleiner Erweiterung):

meineFunctions.php
PHP:
<?php 
class MeineFunctionClass
{
	var $site;
	var $xml;

	function MeineFunctionClass($lang) //constructor
	{
		$this->lang = $lang;
		//load GET params
		if(isset($_GET['site']))
			$this->site = $_GET['site'];
	
		//load xml
		if (file_exists($this->lang."/navigation.xml"))
			$this->xml = simplexml_load_file($this->lang."/navigation.xml");
		else 
			exit('XML File not found.');
	}

	function GetHeaderPic()
	{
	    return  $this->lang.'/'.$this->site.'_header.jpg;
	}
}
?>

index.php
PHP:
<?php 
	require_once ('config.php');
	require_once ('scripts/meineFunctions.php');
	//create object
	$myFunctionClass = new MeineFunctionClass($lang);
?>

//bliblablub seitendesign und irgendwo steht der functionsaufruf
<? php echo GetHeaderPic(); ?>

sieht doch schon ganz nett aus und kann so juut gebraucht werden. Jedoch funktioniert das mit dem XML nicht. Irgendwie kriege ich den Pfad zum XML nicht raus:

Ordnerstruktur:
  • de/navigation.xml
  • scripts/meineFunctions.php
  • index.php

Ich denke, die Funktion wird aus der index.php aufgerufen (also auf einem object im index.php). Sprich der relativeUrl Focus müsste doch auf dem index.php Verzeichnis liegen? Oder seh ich da was falsch?
 
hat sich erledigt! der Fokus liegt wirklich auf index.php aber irgendwas hab ich da wohl vergessen :)

PHP:
	$path = $this->lang."/navigation.xml";
	if (file_exists($path))
		$this->xml = simplexml_load_file($path);

so funktionierts
 
Zurück