php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.07.2007, 18:14  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Suche nach Entwurfsmuster, ~singleton + x

Hallo,
folgendes Konstrukt:
PHP-Code:
<?php
myclass
::doSomething("x");
// .. viel code ..
echo mysql::getSomething(); // "x"
?>
Gibt es ein Designpattern hierzu, statische Aufrufe intern/gekapselt trotzdem nicht-statisch zu behandeln? Mit "global" wäre die Sache einfach, darauf möchte ich aber verzichten. Singleton wäre auf jeden Fall mit im Spiel, allerdings will ich beispielweise nur ungern so eine Technik verwenden:
PHP-Code:
<?php
singleton
::call("mysql""getSomething""x");
?>
Wird vermutlich mit Methoden-Überladung laufen. Gibt es dafür ein Pattern? Wenn nein bastel ichs selbst und sende hier die "Lösung".

Danke & Gruß.
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 19.07.2007, 22:45  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Kannst du die Frage nochmal etwas ausführlicher gestalten? Ich komme nicht ganz hinter das Problem.
nikosch ist gerade online   Mit Zitat antworten
Alt 19.07.2007, 23:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Die Sache ist die, dass ich ziemlich häufig Klassen habe, von denen es nur eine Instanz geben soll. Beispielsweise häufig Datenbank-, Logging-, Debug-, RequestHelper-, Error-Klassen.

Ich bin ein schreibfauler Mensch und möchte nicht jedes mal bei Benutzung die Instanz anfordern, sondern die Instanz anfordern und gleich mit ihr arbeiten, in einem Schritt.

PHP-Code:
<?php
$db 
singleton('database');
$db->query("SELECT .. ");
?>
Das ist eine Zeile zuviel.
Schön wäre
PHP-Code:
<?php
singleton
('database')->query("SELECT .. ");
?>
Wobei ich grade nicht weiß, ab welcher PHP-Version direkt auf per Funktion zurückgeworfenen Objekten gearbeitet werden kann.

PHP-Code:
<?php
class C
{
    public static function 
get()
    {
        return new 
C2;
    }
}

class 
C2
{
    public function 
hello()
    {
        return 
"Hello World!";
    }
}

echo 
C::get()->hello();
?>
Hm klappt, hat sich somit mal wieder erledigt meine Frage (es sei denn jemand weiß ab wann solche Konstrukte unterstützt werden).
Zergling-new ist offline   Mit Zitat antworten
Alt 20.07.2007, 00:13  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Ich würde mal behaupten erst seit php5

NACHGELEGT:

Sowas ?:

PHP-Code:
<?
class Singleton 
    
{  
    private static 
$uniqueInstance NULL;   

    protected function 
__construct() {}   
    private final function 
__clone() {}  

     public static function 
getInstance ($done
         {    
         if (
self::$uniqueInstance === NULL
             {      
             
self::$uniqueInstance = new Singleton;    
             }     
       
self::$uniqueInstance->done $done;
       return 
self::$uniqueInstance;  
         }
    
    function 
work ()
      {
      echo 
$this->done;
      }
    
    
    }

Singleton::getInstance ('yes')->work (); // yes

?>
nikosch ist gerade online   Mit Zitat antworten
Alt 20.07.2007, 00:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Vielleicht kannst du mir nochmal Nachhilfe in Sachen static-properties geben.
Ist eine static-Property praktisch eine singleton-Property?
Zergling-new ist offline   Mit Zitat antworten
Alt 20.07.2007, 02:46  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Bin damit auch noch neu im Fach.
Nicht direkt würde ich sagen. Die statische Eigenschaft ist eine Variable der Klasse, also schon irgendwie einmalig vorhanden, da aber ein instanziertes Objekt dieser Klasse (oder eines einer abgeleiteten Klasse) immer noch über self::variable/parent::variable bzw. klassenname::variable darauf zugreifen kann (und die Variable dann für alle Objekte der Klasse ändert !!) wäre Singleton irgendwie nicht der richtige Ausdruck.

Vgl.
PHP-Code:
<?php

class Test 
  
{
  public static 
$iCount 1;
 
  public function 
increment () 
    {
    
self::$iCount++;
    }

  public function 
view () 
    {
    echo 
self::$iCount;
    }
  }

class 
Test2 extends Test
  
{
  }

 
$a = new Test;
$b = new Test;
$c = new Test2;
 
echo 
Test::$iCount// 1
$a->increment ();
$b->increment ();
$c->increment ();

echo 
$a->view (); // 4
echo $c->view (); // 4

?>
nikosch ist gerade online   Mit Zitat antworten
Alt 21.07.2007, 00:19  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Zergling,

wie nikosch77 schon sagte, geht eine solche Mehrfachverkettung mit PHP 5. Für meinen Geschmak ist das jedoch nicht ästhetisch, da man nicht wirklich schön "sieht", das zurückkommt und was man da aufruft. Ich habe nichts gegen eine Zeile mehr, denn diese bringt IMHO mehr Übersicht und Lesbarkeit mit in den Code.


Zitat:
Ist eine static-Property praktisch eine singleton-Property?
Nein, denn statisch bedeutet nur, dass diese Klassen-Variable auch ohne Instanz der Klasse sichtbar ist. Heißt jedoch nicht, dass diese Variable nur einmal während eines Requests verfügbar ist, da beliebige Klassen auch beliebig oft instanziierbar sind.


Ich würde hier einfach ein Abstract Singleton verwenden und basta.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 21.07.2007, 04:29  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Nein, denn statisch bedeutet nur, dass diese Klassen-Variable auch ohne Instanz der Klasse sichtbar ist. Heißt jedoch nicht, dass diese Variable nur einmal während eines Requests verfügbar ist, da beliebige Klassen auch beliebig oft instanziierbar sind.
Eigentlich ist das so net korrekt ^^ Is ist sehr wohl nur einmal vorhanden, PHP bietet aber das feature über das Objekt auf die Variable zuzugreifen.

Eine statische Variable ist ein Klassenattribut, also im Klassenkontext gültig. Sie existiert nur einmal, weil eine Klasse nur einmal existiert. Wenn man nun versucht auf eine statische Variable anstatt über den Klassenkontext (: über den Objektkontext (->) zuzugreifen, wird die Klasse dafür einfach aufgelost.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 21.07.2007, 22:49  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Eine statische Variable ist ein Klassenattribut, also im Klassenkontext gültig. Sie existiert nur einmal, weil eine Klasse nur einmal existiert. Wenn man nun versucht auf eine statische Variable anstatt über den Klassenkontext (:Smile über den Objektkontext (->) zuzugreifen, wird die Klasse dafür einfach aufgelost.
Papalapapp. "Eine Klasse existiert nur einmal" ist ja noch richtig, aber die Instanz der Klasse - das Objekt - kann n Mal im Code auftauchen womit die Aussage wiederlegt ist.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 22.07.2007, 00:11  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Aber jedes der Objekte greift doch auf die selbe Referenz der Variablen zu, die weiterhin an die Klasse gebunden ist. Siehe $iCount in meinem Bsp. weiter oben.
nikosch ist gerade online   Mit Zitat antworten
Antwort


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
Verbesserungsvorschläge: Design und Suche Manko10 Board-Support 3 15.06.2008 16:21
Suche 'strahlfreudigen' Router nikosch Off-Topic Diskussionen 6 22.01.2008 19:06
Suche in Office Dateien mit Index Beatbox Off-Topic Diskussionen 6 09.02.2007 15:34
Suche Alienuser PHP Tipps 2006 5 02.07.2006 16:31
suche funktion: suche alles zwischen notyyy PHP Tipps 2006 7 05.06.2006 20:46
[Erledigt] Erweiterung der Suche PHP Tipps 2007 2 01.12.2005 19:30
Suche in Datenbank realisieren Unbekanntes_Pferd PHP Tipps 2007 4 09.11.2005 16:22
suche lösungsweg für komplexe suche, md5hash PHP Tipps 2005-2 3 19.07.2005 17:57
stichwort suche boehseronkel Datenbanken 2 14.07.2005 09:28
mal wieder eine suche lomtas Datenbanken 0 12.07.2005 11:03
Suche Leute die Lust haben mit mir eine Community zu gründen Zero.exe Beitragsarchiv 4 28.03.2005 16:05
Suche Job als Entwickler/Designer (Raum Bonn o. Telearbeit) Beitragsarchiv 23 01.03.2005 14:00
Suche mehrere Images........ Beitragsarchiv 7 10.01.2005 08:07
Suche Php/MySql Programmierer (auch Anfänger) Beitragsarchiv 10 05.12.2004 22:53

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php self:: static klassenvariable increment, php singleton database, mysql mehrfachverkettung

Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.