Ankündigung

Einklappen
Keine Ankündigung bisher.

[PHP] Dateiweite Konstante

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP] Dateiweite Konstante

    Hallo,

    kann man Konstanten definieren, die nur innerhalb der jeweiligen Datei sichtbar sind?

    5 Dateien von 2 verschiedenen Autoren enthalten mehrere Klassen; jede Klasse soll seinen Autor "wissen" und ausgeben können.
    PHP-Code:
    define('AUTHOR''Max Mustermann');
    define('AUTHOR''John Doe'); 
    FX3

  • #2
    Dateiweit nicht. Aber:
    jede Klasse soll seinen Autor "wissen" und ausgeben können.
    das klingt doch eher nach Klassenkonstanten
    PHP-Code:
    class MaxMustermannKlasse
    {
      const 
    AUTHOR 'Max Mustermann';
    }
    echo 
    MaxMustermannKlasse::AUTHOR// Max Mustermann 

    Kommentar


    • #3
      War nur ein Beispiel, das mit den Autoren...

      Es soll auch aus Funktionen auf die jeweilige Konstante zugegriffen werden.

      Gibts da wahrscheinlich nichts oder?

      Kommentar


      • #4
        Zitat von FX3 Beitrag anzeigen
        War nur ein Beispiel, das mit den Autoren...

        Es soll auch aus Funktionen auf die jeweilige Konstante zugegriffen werden.

        Gibts da wahrscheinlich nichts oder?
        Du kannst aus Funktionen auf Klassenkonstanten zugreifen.

        Kommentar


        • #5
          Ja aber wenn ich jetzt 3 Dateien einbinde, die jeweils eine Class FileInfo haben, meckert PHP.
          Deshalb wäre es wunderbar, wenn es da eine Sichbarkeit für Konstanten gäbe, dass sie nur aus der eigenne Datei sichtbar sind

          Kommentar


          • #6
            Zitat von FX3 Beitrag anzeigen
            Ja aber wenn ich jetzt 3 Dateien einbinde, die jeweils eine Class FileInfo haben, meckert PHP.
            Ja, zu Recht und völlig unabhängig von irgendwelchen Konstanten.

            Deshalb wäre es wunderbar, wenn es da eine Sichbarkeit für Konstanten gäbe, dass sie nur aus der eigenne Datei sichtbar sind
            "Deshalb"? Was würde das ändern?

            Kommentar


            • #7
              Zitat von fab Beitrag anzeigen
              Ja, zu Recht und völlig unabhängig von irgendwelchen Konstanten.



              "Deshalb"? Was würde das ändern?
              Ich hätte in jeder Datei die Konstante AUTHOR, die jeweils nur innerhalb der Datei sichtbar ist.

              Kommentar


              • #8
                Ich verstehe immer noch nicht, warum. Bzw. warum du keine Klassenkonstanten einsetzen kannst.

                Namespace-Konstanten wären vielleicht noch eine Alternative, aber ohne zu wissen was eigentlich dein Problem ist kann ich dazu auch nicht mehr sagen.

                Kommentar


                • #9
                  Jetzt entscheide Dich langsam mal, was Du willst. Und vor allem beschreib es ordentlich. Sonst ist hier Feierabend.

                  Kommentar


                  • #10
                    OK nochmal etwas ausführlicher:

                    Ich hab eine Basisklasse, die eine Methode GetFileInfo enthält. Diese soll so angelegt sein, dass sie auch be Kindklassen ein Ergebnis bringt. Dieses Ergebnis soll immer ein string sein, den ich pro Datei definieren möchte.
                    Beispiel:
                    PHP-Code:
                    <?php

                    /// baseclass.inc.php

                    define('FileInfo''Das ist die Datei baseclass.inc.php. Sie enthält u.a. die Klasse BaseClass, von der alle weiteren Klassen direkt oder indirekt abstammen.');

                    class 
                    BaseClass
                    {
                      public function 
                    GetFileInfo() 
                      {
                        return(
                    FileInfo);
                      }
                    }

                    ?>
                    In einer anderen Datei extededclass.inc.php soll die Konstante Fileinfo eben einen anderen Wert annehmen und von den Klassen, die dort definiert werden ausgegeben werden.

                    Kommentar


                    • #11
                      Warum definierst du dann Konstanten, anstatt jeder Klasse diese Eigenschaft mitzugeben?

                      Kommentar


                      • #12
                        benutzt du PHP 5.3? Dann kannst du dir late static binding zu Hilfe nehmen:

                        PHP-Code:
                        class BaseClass
                        {
                          const 
                        FileInfo 'baseclass.inc.php info';
                          public function 
                        getFileInfo()
                          {
                            return static::
                        FileInfo;
                          }
                        }
                        class 
                        ExtendedClass extends BaseClass
                        {
                          const 
                        FileInfo 'extendedclass.inc.php info';

                        Kommentar


                        • #13
                          Wie soll ich sie der Klasse mitgeben? Es hängt ja von der Datei ab, in der die Klasse definiert ist. und bei mehreren Klassen pro Datei ...

                          Kommentar


                          • #14
                            Zitat von FX3 Beitrag anzeigen
                            und bei mehreren Klassen pro Datei ...
                            gibt es dafür eigentlich einen besonderen Grund?

                            Kommentar


                            • #15
                              Ja ich möchte .net-Namespaces nachbauen aber mit Punkten statt mit \.
                              Also das ich dann ne Info erhalte, wenn meine Klasse in ner Datei liegen, die meinem Namespace XXX.MyClasses.BaseClasses angehören, wie bspw. XXX.MyClasses.BaseClasses.BaseFileClass

                              Kommentar

                              Lädt...
                              X