Gleicher Funktionsname - 2 Projekte

Keiner ne Idee?

Ich komme einfach nicht weiter. Hab mir jetzt alles nochmal durchgelesen und Tutorials angesehen aber leider keine Ahnung wie das mit Variablen in Namenspaces funktionieren soll
 
1. Keine Pushbeiträge
2. Gesucht hast du wohl kaum. Siehe:
zFLQHSi.png


Namespaces können keine Variabeln beinhalten, Variabeln sind immer im globalen Namespace. Dies ist aber nicht weiter schlimm, da man ja globale Variabeln nie verwendet.
 
Ja das habe ich auch gelesen, aber da ComFreek meinte "Variablen kannst du auch in Namensräume packen." habe ich eben nach so einer Lösung gesucht und war verwirrt.

Was nimmt man denn anstelle von globalen Variablen? Wie muss man vorgehen?
 
Du könntest in jedem Namensraum eine Art Config-Klasse definieren, die jeweils eine entsprechende Variable hat mit gleichen Namen. Dann könntest Du diese Klasse jedes mal individuell laden und hättest immer nur die Werte, die Du brauchst:
PHP:
namespace A {
  class Config {
    public static $vars = array();
  }

  Config::$vars[ 'name' ] = 'foo';
}

namespace B {
  class Config {
    public static $vars = array();
  }

  Config::$vars[ 'name' ] = 'bar';
}
PHP:
require_once 'a/config.php';
use \A\Config;

echo Config::$vars[ 'name' ]; # foo
 
Damit ist gemeint, dass Du dort all das definieren kannst. Das Problem ist eben nur, dass nur Funktionen und Klassen in einem Namensraum lokal sind, aber Konstanten und Variablen über den Namensraum hinaus Gültigkeit besitzen.
 
Ich versteh nicht ganz dein Verständnisproblem.
Wie sheel sagte, kann ein Namespace viele Elemente Funktionen und Klassen enthalten.

Hast du vielleicht einen Java-Hintergrund? In Java sind Klassen nämlich das A und O der Sprache, während z. B. in PHP auch eine eine Funktion unabhängig von einer Klasse existieren kann.
 
Ok jetzt ist der Groschen gefallen. Ich habe noch nicht mit Klassen gearbeitet, sondern nur mit Funktionen und ich habe aktuell in einer Config Datei wie gesagt sowas drin stehen:

$price['car']['audi'] = 200;
$price['car']['skoda'] = 50;

Ich hatte das so verstanden, dass ich einfach einen namespace drüber schreiben muss und damit der Array nicht mehr global ist, sondern sich in einem namespace befindet - dies ist ja nicht so wie ich jetzt verstanden habe.

Desshalb komme ich wohl nicht drum rum, alle Config Arrays wie einfach nur crack in seinem Beispiel gezeigt hat in Klassen zu verschieben und eben mit der Klasse davor aufzurufen - richtig?

Vielen Dank euch nochmal für euere Geduld :)
 
Also ich persönlich würde es nicht so lösen, da ich diesen Weg für unsauber halte, aber jetzt noch zu beschreiben, wie man das sauber löst.. puuh, dafür habe ich gerade leider nicht so sehr die Muse.
 
Kannst du mir mal bitte ein Beispiel geben?

So hab ichs verstanden und so funktionierts auch mit funktionen:

Main Datei:
Code:
<?php
namespace MAIN;
$test = "main";

echo $test."<br>";
include "include.php";
echo $test."<br>";

Include Datei:
Code:
<?php
namespace EXTERN;

$test = "include";

echo $test."<br>";


Das Ergebnis ist:
main
include
include

also sprich $test wird überschrieben

Ich glaube, das Verstädnisproblem, das du bei diesem Code hast, ist das Folgende: Mach dir bewusst, was PHP bei einem include macht, nämlich einfach nur die entsprechende Zeile "include 'foobar.php'" durch den Inhalt der Date ersetzen. Dementsprechend wird dein obiger Code zu folgendem:
PHP:
<?php
namespace MAIN;
$test = "main";

echo $test."<br>";
namespace EXTERN;

$test = "include";

echo $test."<br>";
echo $test."<br>";

Da siehst du schön, wo welcher Namespace genommen wird ;) Übrigens, kannst du, um das ganze noch klarer zu machen, Namespaces auch mit Curly-Brackets ({}) umgeben. Etwa so:
PHP:
namespace A {
  $var = 'test';
}
 

Neue Beiträge

Zurück