Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigene Enum Klasse wird im constructor einer anderen Klasse nicht gesehen

Einklappen

Neue Werbung 2019

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

  • Eigene Enum Klasse wird im constructor einer anderen Klasse nicht gesehen

    Hallo Zusammen,

    ich benötige eine Enumeration. Dafür habe ich die Klasse SplEnum gefunden. Also erzeuge ich eine eigene Klasse die so aus sieht:

    PHP-Code:
    <?php

    namespace MyApp;

    class 
    MessageTypEnum extends SplEnum {
        const 
    __default self::unused;

        const 
    unused = -1;
        const 
    error 0;
        const 
    ok 1;
    }

    Dann möchte ich die Enumeration nutzen. Ich habe eine weitere Klasse AppController. In den Methoden der Klasse AppController kann ich Enum Klasse nutzen jedoch NICHT im Constructor von AppController.


    PHP-Code:
    <?php

    namespace MyApp;   // <<< gleicher namespace 

    use http\Exception;

    class 
    AppController
    {
        protected 
    $twig null;
        protected 
    $config null;
        protected 
    $apiClient null;
        protected 
    $connectionArray = [];


        
    /**
         * AppController constructor.
         * @param $twig, $apiClient
         */
        
    public function __construct($twig$apiClient)
        {
            
    $this->twig $twig;
            
    $this->apiClient $apiClient;
            
    $this->config = include dirname(__DIR__) . '/config/appConfig.php';

            
    $this->connectionArray = array('ParamsAvailable' => false,
                
    'ServerAvailable' => false,
                
    'ServerPing' => false,
                
    'DataAvailable' => false,
                
    'message' => '',
                
    'messagetype' => new MessageTypEnum(MessageTypEnum::unused));    //<<< das geht nicht

        
    }

        private function 
    testServerConnection()
        {
          ...
                
    $this->connectionArray['messagetype'] = new MessageTypEnum(MessageTypEnum::error);   //<<< das funktioniert.
         
    ...
        }
    Hat jemand eine Idee?

  • #2
    Idee?
    1. Geht nicht ist keine Fehlerbeschreibung. Error-Reporting aktivieren + komplette Fehlerausschrift posten.
    2. Code soweit reduzieren das der Fehler eben noch reproduzierbar ist. SplEnum ist auf vielen Systemen nicht verfügbar. Triitt der Fehler auch auf wenn extends SplEnum auskommentiert wird?

    Kommentar


    • #3
      Und bitte testbaren und keinen verstümmelten Code posten.

      Kommentar


      • #4
        Danke für den Hinweis dass SPEnum nicht in allesn System vorhanden ist. Ich dachte das ist Bestandteil von PHP"

        Sorry, ich dachte das ist für Euch eh klar warum es nicht geht.

        Die Fehlermeldung:Fatal error: Class 'MyApp\SplEnum' not found in C:\wamp64\www\MP\src\MessageTypEnum.php on line 7

        Der Dateiname der Klasse MessageTypEnum ist MessageTypEnum.php da ist nur diese eine Klasse enthalten dessen source ich ober angegeben habe.
        Er sucht also das File SplEnum das habe ich dann eben nicht, zumindest nicht an dieser Stelle. Interessant ist, warum funktioniert es innerhalb der Methoden?


        Das Projekt ist mir Routen und so. Ich versuche eine neue leere Klasse zu bauen und nur die Enum im Constructor zu verwenden. Ich muss nebenbei auch arbeiten. ich melde mich sobald ich eine testbare Umgebung habe....

        Kommentar


        • #5
          Wenn du den globalen Namespace ansprechen willst, musst du ein \ voran stellen. Also z.B. \SplEnum.

          Kommentar


          • #6
            Zitat von R1100 Beitrag anzeigen
            Danke für den Hinweis dass SPEnum nicht in allesn System vorhanden ist. Ich dachte das ist Bestandteil von PHP
            https://www.php.net/manual/de/spl-ty...stallation.php

            Kommentar


            • #7
              Ich habe nun meine Klasse so umgebaut, eigentlich genau das was ich ursprünglich wollte.
              So funktionierts.

              PHP-Code:
              class MessageTypEnum {
                  const 
              __default self::unused;
                  const 
              unused = -1;
                  const 
              error 0;
                  const 
              ok 1;

              Kommentar


              • #8
                Type schreibt man halt mit "e" am Ende

                Und das "unused" kann man sich im Endeffekt sparen.

                Außerdem ist es üblich Konstanten in Großbuchstaben zu schreiben.

                Kommentar


                • #9
                  Dankeschön ich habe alles umgestellt.

                  ich habe gerade festgestellt dass die Konstanten Kassen Konstanten sind. Ich sie also nicht mit new instantiieren.
                  PHP-Code:
                  $this->connectionArray['messagetype'] = MessageTypeEnum::ERROR

                  Kommentar

                  Lädt...
                  X