OpenSUSE LEAP 14.2 – KDE

Ich habe vor kurzem mal wieder ein Linux installiert. Diesmal habe ich mich für OpenSUSE entschieden und finde es recht ansprechend. Die KDE-Oberfläche läuft sehr flüssig. An das Paketmanagement muss ich mich erst noch gewöhnen.

Folgendes ist mir dann passiert:
Ich wollte mit KNetAttach Netzlaufwerke verbinden und wusste nicht, wie ich das genau machen soll, bis ich im Internet gelesen habe, dass in das Feld „Server“ wirklich nur die Server-IP oder der Server-Domainname hineinkommt. In das Feld „Ordner“ kommt dann der Pfad, welcher bei den meisten Tools hinten drangehängt wird.

Hier muss wohl noch ein wenig an der Benutzerfreundlichkeit gefeilt werden.

IntelliJ und andere JetBrains-Produkte mit deutscher Tastatur

Wer IntelliJ oder andere JetBrains-Produkte mit deutscher Tastatur verwenden will, der hat unter Umständen Probleme mit Sonderzeichen und Tastenkombinationen.

Nach langer Recherche konnte ich folgenden Link ausgraben:

https://youtrack.jetbrains.com/issue/IDEA-142462

In den keyboard.xml-Dateien der diversen IDE’s von JetBrains diesen Eintrag löschen und den Haken in den Settings setzen. Schon klappt es. (Jedenfalls bei mir.)

Objektorientierung in PHP

Die  Web-Skriptsprache PHP ist an sich ja schon in einigen Kreisen verpönt, aber ich habe zugestimmt eine einfache Web-Shop Software für einen Freund zu programmieren.
Natürlich habe ich nicht vor xt:commerce nachzuprogrammieren, aber etwas kleines und feines sollte es schon sein. Also habe ich mich drangesetzt und mich in OOP mit PHP eingearbeitet und war erst beeindruckt und an einigen Stellen enttäuscht. Meine Erfahrungen möchte ich in diesem Beitrag teilen.

Interfaces

Interface heißt auf Deutsch Schnittstelle und ist das, was es bedeutet. Ein Interface bietet eine Schnittstelle zu einem Projekt und ihren Objekten. Entscheidet sich ein Programmierer dazu, solch ein Projekt zu modifizieren, dann kann der ein Interface implementieren und stellt damit sicher, dass das Projekt die gleichen Signaturen vorfindet.

Nicht nur ein anderer Programmierer, sondern auch man selber profitiert von Interfaces, weil diese Flüchtigkeitsfehler schnell aufdecken können.

Lange Rede, kurzer Sinn: Ein Interface wird wie folgt geschrieben:

interface iMyClass {
  public function sampleMethod();
  public function exampleMethod($someVariable);
}

Klassen

Klassen im einfachen Sinne sind Baupläne für Objekte. Auch hier ist PHP mittlerweile gut dabei, denn Type Hinting erlaubt es einem, bestimmte Variablen an Typen zu binden. Mehr dazu in der PHP-Dokumentation.

class MyClass implements iMyClass {
  public $someProperty;
  public array $someArrayProperty;
  public AnotherClass $someAnotherClassProperty;

  protected $someProtectedProperty;
  private $somePrivateProperty;

  public function __construct()
  {
    // Constructor
  }

  public function getSomeProperty()
  {
    return $this->someProperty;
  }

  public function setSomeProperty($someProperty)
  {
    $this->someProperty = $someProperty;
  }
}

Das ist ja alles schon ganz nett. Doch kommen wir jetzt zu den Ärgernissen.

Ärgernis 1: Überladung von Konstruktoren

Ab und zu kommt es vor, dass man Konstruktoren überladen möchte. In PHP ist es nicht möglich eine Methode innerhalb einer Klasse zweimal zu deklarieren. Dadurch kommt ein typisches Überladen, wie man es aus Java oder C# kennt, nicht infrage.

Vielmehr muss hier zu einem Trick gegriffen werden, der in der PHP-Dokumentation in einem Kommentar erklärt wird.

Ärgernis 2: Überladung von Methoden

Das Überladen von Methoden ist auch etwas umständliches in PHP. Hier muss zu sogenannten Magic Methods gegriffen werden. In diesem Fall werden diese über __call() aufgerufen.

class AnotherClass {
    public function __call($name, $arguments)
    {
        if ($name == "someFunction")
        {
              switch (count($arguments))
              {
                  case 0:
                      // Do something
                      break;

                  case 1:
                     // Do something different with one Argument
                     break;
              }
        }
    }
}

Das ist eine Möglichkeit an die Sache heranzugehen. Es gibt aber noch mehr. Welche man nutzt, liegt beim persönlichen Geschmack.

Fazit

Wenn ich nicht müsste, dann würde ich nicht in PHP programmieren. Wider Erwarten hat sich PHP in den letzten Jahren zu einer anderen Sprache entwickelt. Es ist für mich zu einer Skriptsprache geworden, die ich nicht mehr allzu sehr verabscheue. Auch wenn es wahrscheinlich ein Großteil an Erfahrung ist, der in diese Erkenntnis einfließt.