Announcement

Collapse
No announcement yet.

Namespace und Gültigkeitsbegrenzungsoperator

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Namespace und Gültigkeitsbegrenzungsoperator

    hallo zusammen!

    bin gerade dabei mit hilfe eines buches php zu lernen. im zuge dessen wird ein basissystem mit php und mysql entwickelt wobei ich auf kleine probleme gestoßen bin.
    zuerst wurde in der class.HTML.php ein namespace System definiert und in der klasse drei methoden zur generierung eines html codes geschrieben. über eine testdatei sollte man dann per
    PHP Code:
    System::HTML::printHead(); 
    darauf zugreifen können. da ich dort aber einen fehler wegen unerwartetem :: bekommen habe, habe ich das ganze nach etwas recherche auf
    Code:
    System\HTML::printHead();
    abgeändert, was für diesen fall auch super funktioniert hat.

    als nächstes wurde dann eine class.MySQL.php mit dem namespace System\Database gemacht. dort wird im konstruktor dann ein neues mysqli-objekt erstellt. und da is mein problem. führ ich das ganze aus bekomm ich den fehler:
    Fatal error: Class 'System\Database\mysqli' not found in D:\Development\PHP\xampp\htdocs\Basissystem\inc\cl asses\DB\class.MySQL.php on line 29
    der fehler is zwar nachvollziehbar, weil es in dem namespace keine derartige klasse gibt, aber bestimme ich den namespace wie im buch mit namespace System:: Database, bekomm ich wieder diesen hier:
    Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_NS_SEPARATOR or ';' or '{' in D:\Development\PHP\xampp\htdocs\Basissystem\inc\cl asses\DB\class.MySQL.php on line 2
    kann mir da vielleicht irgendwer weiterhelfen, mit tipps, aufklärung, erklärung etc? ^^

  • #2
    Hallo,
    Originally posted by Kagemusha View Post
    ...als nächstes wurde dann eine class.MySQL.php mit dem namespace System\Database gemacht. dort wird im konstruktor dann ein neues mysqli-objekt erstellt. und da is mein problem. führ ich das ganze aus bekomm ich den fehler:

    der fehler is zwar nachvollziehbar, weil es in dem namespace keine derartige klasse gibt, ...
    Du mußt dein Namespace-Konzept auch konsequent durchsetzen. Beim Zugriff auf "globale" Klassen (wie z.B. mysqli) mußt du dann den "Global space" mit \ angeben. Also z.B.:
    Code:
      ...
      $mySQLi = new \mysqli();
      ...
    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      aha, so einfach geht das, thx ^^
      was ich aber seltsam finde, dass es beim autor des buches anscheinend mit System:: Database funktioniert hat, ich dabei aber immer eine fehlermeldung erhalte.
      wie werden namespaces in der praxis denn nun verwendet, mit :: oder mit \ ?
      Zuletzt editiert von Kagemusha; 28.08.2009, 08:59.

      Comment


      • #4
        Hallo,

        also der :: (Doppel-Doppelpunkt) ist der Gültigkeitsbereichsoperator oder auch Paamayim Nekudotayim genannt und ist ein Kürzel, das Zugriff auf statische, konstante und überschriebene Member oder Methoden einer Klasse erlaubt. Hat also nichts mit Namespaces zu tun!

        Der Namespace-Trenner ist dagegen ein umgekehrter Schrägstrich \ (Backslash).

        So steht es zumindest im PHP-Handbuch und so scheint es ja auch zu funktionieren

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X