php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.12.2009, 12:48  
Neuer Benutzer
 
Registriert seit: 30.12.2009
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
lopelz befindet sich auf einem aufstrebenden Ast
Standard Statische Methoden oder Singleton Klasse ?

Hallo liebe Gemeinde,
ich wollte mir gestern eine Klasse, die mir die Arbeit mit Strings abnimmt, schreiben. Nun wollte ich fragen welches die bessere Geschichte ist. Soll man eine Klasse schreiben mit statischen Methoden oder doch lieber eine Singleton Klasse, die man durch String::use($string) benutzt und man so Funktionen verketten kann, wenn man immer die Instanz zurückgibt ?
lopelz ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.12.2009, 13:24  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Definitiv keine Fortgeschrittenen-Frage.

Zitat:
die mir die Arbeit mit Strings abnimmt
was auch immer das heißen soll.
Zitat:
Soll man eine Klasse schreiben mit statischen Methoden oder doch lieber eine Singleton Klasse
Bei Singleton gibts einen kleinen aber entscheidenden Unterschied.
Zitat:
und man so Funktionen verketten kann, wenn man immer die Instanz zurückgibt ?
Einfach nur Quatsch

[MOD: verschoben]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 30.12.2009, 13:28  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,
mir ist nicht so ganz klar was du vor hast. Hört sich ja etwas danach an, als ob du einfach nur die String-Funktionen in eine Klasse verschieben willst. Das macht eigentlich keinen Sinn.

Vielleicht führst du deine Frage nochmal mit einem Beispiel an.
Chriz ist offline  
Alt 30.12.2009, 13:29  
Neuer Benutzer
 
Registriert seit: 30.12.2009
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
lopelz befindet sich auf einem aufstrebenden Ast
Standard

Was soll daran Quatsch sein ?

PHP-Code:
class StringUtilStatic {
    static public function 
removeTrailingSlash($string) {
        return (
$string != '' && $string{strlen($string) - 1} == '/') ? substr($string0, -1) : $string;
    }
    
    static public function 
removeLeadingSlash($string) {
        return (
$string != '' && $string{0} == '/') ? substr($string1) : $string;
    }

PHP-Code:
$string "/root/folder/";
$string StringUtilStatic::removeTrailingSlash(StringUtilStatic::removeLeadingSlash($string)); 
PHP-Code:
class StringUtilSingleton {
    static private 
$instance null;
    public 
$data '';
    
    private function 
__clone() {}
    private function 
__construct() {}
    
    static public function 
in($data) {
        if(
self::$instance === nullself::$instance = new self;
        
self::$instance->data $data;
        return 
self::$instance;
    }
    
    public function 
removeTrailingSlash() {
        if(
$this->data != '' && $this->data{strlen($this->data) - 1} == '/'$this->data substr($this->data0, -1);
        return 
$this;
    }
    
    public function 
removeLeadingSlash() {
        if(
$this->data != '' && $this->data{0} == '/'$this->data substr($this->data1);
        return 
$this;
    }
    
    public function 
__toString() {
        return 
$this->data;
    }

PHP-Code:
$string "/root/folder/";
$string = (string)StringUtilSingleton::in($string)->removeLeadingSlash()->removeTrailingSlash(); 

Geändert von lopelz (30.12.2009 um 13:32 Uhr).
lopelz ist offline  
Alt 30.12.2009, 13:55  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wie wärs mit trim($string, "/")

Solche Konstrukte solltest du immer vermeiden:
Zitat:
PHP-Code:
<?php
StringUtilStatic
::removeTrailingSlash(StringUtilStatic::removeLeadingSlash($string));
Geschachtelte Operationen, die du vermutlich mehr als einmal brauchst, kannst du auch gleich zu einer neuen Methode zusammenfassen:
PHP-Code:
<?php
StringUtilStatic
::trimSlash($string);
Für nicht-statische Verwendung spricht sicherlich das Fluent-Interface ($string->removeLeadingSlash()->removeTrailingSlash()), für die statischen Aufrufe spricht, dass du die Methoden einfacher testen kannst, da du keine Zustände hast, die die Testergebnisse möglicherweise beeinflußen. Ich würde deshalb letztere bevorzugen.
Chriz ist offline  
Alt 30.12.2009, 14:17  
Neuer Benutzer
 
Registriert seit: 30.12.2009
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
lopelz befindet sich auf einem aufstrebenden Ast
Standard

Was spricht denn gegen solche Verschachtelungen ? Klar kann man die auch in einer Funktion dann zusammenfassen, aber das war ja jetzt nur ein Beispiel.
lopelz ist offline  
Alt 30.12.2009, 14:28  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Zitat:
Was spricht denn gegen solche Verschachtelungen ?
Gegenfrage: Was spricht dagegen, solche Operationen zusammenzufassen?

Dein Code wird lang, unübersichtlich und schwerer zu warten. Außerdem verlagerst du Funktionalität, die eigentlich in die Klasse gehört nach außen.

Beispielsweise könntest du, wie erwähnt nun die Implementierung ändern, in dem du r/ltrim benutzt:
PHP-Code:
<?php
abstract class StringHelper {
  public function 
removeLeadingSlash($string) {
    return 
ltrim($string"/");
  }
  public function 
removeTrailingSlash($string) {
    return 
rtrim($string"/");
  }
}
// ..
$string StringHelper::removeLeadingSlash(StringHelper::removeTrailingSlash("/das/ist/ein/pfad/"));
echo 
$string// das/ist/ein/pfad
?>
Was du nicht kannst ist trim() benutzen, das beide Operationen in einer Funktion durchführt und damit viel schneller ist als zwei getrennte Aufrufe von rtrim() + ltrim(). Warum? Weil du keine Methode verwendest, die beide Funktionalitäten zusammenfasst.

Hättest du jetzt noch diese Methode und würdest sie verwenden:
PHP-Code:
<?php
abstract class StringHelper {
  
// ..
  
public function removeLeadTrailSlash($string) {
    return 
self::removeLeadingSlash(self::removeTrailingSlash($string));
  }
}
?>
Könntest du mit deinem neuen Wissen über trim() das Konstrukt durch trim() ersetzen.

Natürlich ist das Beispiel hier dünn, weil der Overhead gering ist. Aber in anderen Fällen kannst du vielleicht mehrere Operationen sinnvoller kombinieren und so wirklich Zeit sparen. Und dein verschachtelter Code wird so auch lesbarer
Chriz ist offline  
Alt 30.12.2009, 14:46  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ganz allgemein würde ich doch gerne noch meine Frage beantwortet haben.
Zitat:
Zitat:
die mir die Arbeit mit Strings abnimmt
was auch immer das heißen soll.
Denn bisher sehe ich generell den Einsatz einer Klasse noch nicht als gerechtfertigt an.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
statische Eigenschaft einer unbekannten Klasse aufrufen Zergling-new PHP-Fortgeschrittene 30 05.01.2010 20:04
[Erledigt] Trotz Singleton mehrere Instanzen einer Klasse cetalian PHP Tipps 2009 13 07.07.2009 15:32
Klasse für Objekteigenschaft erzeugen? Asipak PHP-Fortgeschrittene 25 30.05.2009 19:45
[Erledigt] Eine klasse einbinden newWorldOrder PHP Tipps 2009 2 23.02.2009 19:32
Singleton Pattern Verstaendisproblem Luka PHP Tipps 2008 13 19.12.2008 19:00
Methode einer anderen Klasse aufrufen Luka PHP-Fortgeschrittene 15 09.11.2008 14:19
UML - Abstrakte und vererbte Methoden zwingend anzugeben? MaMo-Net Off-Topic Diskussionen 3 17.03.2008 06:04
reflection - wie führe ich alle methoden einer klasse aus... Crypi PHP Tipps 2008 2 20.02.2008 22:51
Gegenstück zu parent:: oder Singleton abstrakt implement. ?? Melchior PHP-Fortgeschrittene 13 26.07.2007 21:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
Singleton besser als komplett statische Klasse ? Cmon PHP-Fortgeschrittene 4 13.06.2006 00:34
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Zugriff auf statische methoden oder konstanten nightfreak PHP-Fortgeschrittene 6 14.11.2005 16:56
klassen und methoden anderer klassen in methoden.... PHP Tipps 2005 17 25.05.2005 09:46
Singleton Klasse - falsche Werte PHP Tipps 2005 20 24.05.2005 12:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript statische methoden, javascript statische klasse, php string mit static class methode verketten, unterschied singleton static, javascript singleton, wann verwendet man statische methoden, javascript static klassen, singleton klasse, unterschied static singleton, javascript statische klassen, php instanz einer statischen methode, unterschied zwischen statischer methode und singleton, javascript statische funktionen, php statische klassen, javascript statische methoden einer klasse, singleton methoden, unterschied statische klasse singleton, javascript singleton class, statische methoden singleton, statische klasse oder singleton

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum