Sinn von Klassen für Datentypen

ZodiacXP

Erfahrenes Mitglied
Hallo. Dies ist eine Diskussion über den Sinn von Klassen für Datentypen.
Das ganze passt nicht in das Forum "Coders Talk", da speziell PHP besprochen werden soll.

Es geht darum herauszufinden, ob ein (komplexer) Datentyp (Integer, String, etc.) mit verschiedenen Methoden zum Manipulieren und Arbeiten (wie aus Java oder C) Vorteilhaft oder Nachteilhaft ist.

Zum Beispiel ein String:
PHP:
class AString
{
  private $_value = '';

  // zum Beispiel eine Funktion, die den String abschneiden soll
  function cut($len, $fill = '')
  {
    // nur wenn string länger
    if (strlen($title) > $len)
    {
      $s = substr($this->__toString(), 0, $len);
      
      // auf ganze wörter trennen, wenn möglich
      if (strpos($s, ' ') !== false)
      {
        return substr($s, 0, strpos($s, ' ')) . $fill;
      }
      return $s . $fill;
    }

    return $this->__toString();
  }

  function set($s)
  {
    $this->_value = $s;
  }

  function __toString()
  {
    return $this->_value;
  }

  function __construct(string $s)
  {
    $this->_value = $s;
  }
}

Oder bietet es sich eher an eine Klasse zu machen die keinen Wert (hier: _value) enthält, sondern für einen speziellen Datentyp manipulationen anbietet und den Wert als Argument erhält:

PHP:
class ManipulateString
{
  function cut($s, $len, $fill = '')
  {
    // nur wenn string länger
    if (strlen($s) > $len)
    {
      $s = substr($s, 0, $len);
      
      // auf ganze wörter trennen, wenn möglich
      if (strpos($s, ' ') !== false)
      {
        return substr($s, 0, strpos($s, ' ')) . $fill;
      }
      return $s . $fill;
    }

    return $s;
  }
}

Das einfache Funktionen schneller als Methoden / Objekte / Klassen sind soll nicht beachtet werden.
 
Hi,

mir persönlich gefällt es besser, eine Klasse für Datentypen anstatt von Helpern. Ich hatte irgendwann mal angefangen, PHP-Extensions für diesen Zweck zu entwickeln. Aus Mangel an Zeit ist das aber wieder gestorben. Außerdem ist es gut möglich, das es sowas auf pecl.php.net schon gibt.

Rein vom Gefühl her würde ich einen String als ein Objekt ansehen, auf den ich verschiedene Operationen ausführen kann.
 
Ich hab mich auch mal damit befasst und ein kleines Projekt gestartet, in welchem ich PHP ein bisschen Typen-sicherer machen wollte. Doch mit (zu-) vielen magischen Funktionen (__get(), __set(), __isset(), etc.) war das am Ende elends langsam. Ich rede hier von halben bis ganzen Sekunden und nicht Milisekunden! Darum hab ich das Projekt auch gleich wieder aufgegeben.

Aber wegen deinem eigentlichen Problem: Obwohl ich auch kein Freund von Helper-Klassen bin, schau dir doch grosse Frameworks (Zend, Cake, Symphony,...), wie die das machen!? Oder andere grosse PHP Projekte (z.B. PHP-Unit, SimpleTest, Woltlab Burning Board, vBulletin, ...).

Soweit ich das sehe, ist eine Gliederung in z.B.:

InterfaceUtilities -> StringUtility | IntegerUtility -> ComplexDataTypeUtility

nicht verkehrt!
Oder eine andere Idee: warum OOP um OOP's Willen?! ^^ Ein paar Helferfunktionen global verfügbar machen in prozeduralem Code?

Am Ende liegt es an deinem Coding stil und wie du persönlich besser die Übersicht behältst!
 
Zurück