Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse funktioniert nicht mehr nach Upgrade auf PHP 7.1.0

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

  • Klasse funktioniert nicht mehr nach Upgrade auf PHP 7.1.0

    Hallo zusammen,

    ich habe die letzten 10 Jahre unser Auftragsabwicklungsprogramm geschrieben und wir arbeiten auch sehr erfolgreich damit.
    Jetzt habe ich aber ein Problem wofür mir meine Erfahrung dennoch nicht ausreicht:
    Nach der Umstellung von PHP 5.X auf PHP 7.1.0 funktioniert die XML-RPC-Schnittstelle nicht mehr wie bisher. Wir hatten immer die VAT-Nummern unserer Kunden über das Bundeszentralamt für Steuern mit dieser Schnittstelle geprüft.
    Dafür hatten wir eine Klasse verwendet in der (wiederholt) der Name einer Klasse mit dem Namen einer Funktion identisch war, was aber PHP 7.1.0 nicht mehr zulässt. Ich habe schon nach anderen Lösungen gesucht, aber wenn es die Möglichkeit gäbe hier eine Lösung zu finden, in dem ich die Namen der Funktionen nur abändere, wäre ich schon sehr froh.
    Hier einmal ein Code-Schnipsel aus der "Klasse":

    PHP-Code:
    class IXR_Client
    {
        var 
    $server;
        var 
    $port;
        var 
    $path;
        var 
    $useragent;
        var 
    $response;
        var 
    $message false;
        var 
    $debug false;
        var 
    $timeout;

        
    // Storage place for an error message
        
    var $error false;

        function 
    IXR_Client($server$path false$port 80$timeout 15)
        {
            if (!
    $path) {
                
    // Assume we have been given a URL instead
                
    $bits parse_url($server);
                
    $this->server $bits['host'];
                
    $this->port = isset($bits['port']) ? $bits['port'] : 80;
                
    $this->path = isset($bits['path']) ? $bits['path'] : '/';

                
    // Make absolutely sure we have a path
                
    if (!$this->path) {
                    
    $this->path '/';
                }
            } else {
                
    $this->server $server;
                
    $this->path $path;
                
    $this->port $port;
            }
            
    $this->useragent 'The Incutio XML-RPC PHP Library';
            
    $this->timeout $timeout;
        }
    ..

    Aber nur mit der Namensänderung ist es bestimmt nicht getan!? Was muss ich sonst noch beachten wenn ich das auf diese Weise lösen möchte?

    Gruß
    Stefan


  • #2
    Wie rufst du denn die Klasse auf?

    Wenn du eine Instanz eines Objekts erstellst wird der Konstruktor aufgerufen. Der muss jetzt in PHP eben auch __construct() heissen und nicht mehr, wie früher, gleich wie die Klasse.

    http://php.net/manual/de/language.oop5.decon.php

    var ist übrigens auch veraltet. public, protected oder private sind die Schlüsselworte für die Variablendeklaration.

    Kommentar


    • #3
      Hi,

      ungetestet:

      PHP-Code:
      class IXR_Client
      {
          var 
      $server;
          var 
      $port;
          var 
      $path;
          var 
      $useragent;
          var 
      $response;
          var 
      $message false;
          var 
      $debug false;
          var 
      $timeout;

          
      // Storage place for an error message
          
      var $error false;

          function 
      __construct()($server$path false$port 80$timeout 15)
          {
              if (!
      $path) {
                  
      // Assume we have been given a URL instead
                  
      $bits parse_url($server);
                  
      $this->server $bits['host'];
                  
      $this->port = isset($bits['port']) ? $bits['port'] : 80;
                  
      $this->path = isset($bits['path']) ? $bits['path'] : '/';

                  
      // Make absolutely sure we have a path
                  
      if (!$this->path) {
                      
      $this->path '/';
                  }
              } else {
                  
      $this->server $server;
                  
      $this->path $path;
                  
      $this->port $port;
              }
              
      $this->useragent 'The Incutio XML-RPC PHP Library';
              
      $this->timeout $timeout;
          }

          public function 
      IXR_Client()
          {
              
      self::__construct();
          } 

      ..

      mfg
      while (!asleep()) sheep++;

      Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

      Kommentar


      • #4
        Aber nur mit der Namensänderung ist es bestimmt nicht getan!? Was muss ich sonst noch beachten wenn ich das auf diese Weise lösen möchte?
        Hier steht alles, was für ein PHP upgrade beachtet werden muss.

        http://php.net/manual/de/migration51.php
        http://php.net/manual/de/migration52.php
        http://php.net/manual/de/migration53.php
        http://php.net/manual/de/migration54.php
        http://php.net/manual/de/migration55.php
        ​​​​​​​http://php.net/manual/de/migration56.php
        ​​​​​​​http://php.net/manual/de/migration70.php
        ​​​​​​​http://php.net/manual/de/migration71.php
        ​​​​​​​
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Gibt es denn Fehlermeldungen oder funktioniert es einfach nicht?

          Kommentar


          • #6
            Dreh einfach mal error reporting ganz hoch (oder schau ins Fehlerlog) und fixe die Meldungen nach und nach bis es wieder funktioniert. https://php-de.github.io/jumpto/faq/#debugging

            PS: Seine eigene Klasse nicht debuggen zu können, ist nicht so richtig fortgeschritten, Sry.

            MOD: Verschoben von PHP-Fortgeschritten
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar

            Lädt...
            X