Portal > Foren > PHP > PHP-Programmierung > Problem mit OOP und Vererbung
Antwort
 
Themen-Optionen
Alt 28.12.2005, 12:49 Nach oben    #1
Jay
Gast
 
Beiträge: n/a
Standard Problem mit OOP und Vererbung

Hallo!

Ich bin noch nicht wirklich fit in OOP, deshalb diese Frage. Ich habe eine Klasse A und eine Klasse B.

Die Klasse B erbt von der Klasse A.

Wie kann ich verhindern, dass die Klasse B den Konstruktor der Klasse A verwendet?
also
PHP-Code:
class {
  public function 
__construct($param$param2) {

  }
}

class 
extends A{
  public function 
__construct() {
   
// Ich will verhindern, dass dieser Aufruf funktioniert.
    
parent::construct('afa','asfa');
  }

final geht nicht, weil die Klasse B sonst überhaupt keinen Konstruktor habe dürfte.
private und protected gehen auch nicht, weil der Konstruktor der Klasse A sonst keine Parameter haben dürfte.

Wie kann ich das machen?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 13:50 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von Fat Tony
private und protected gehen auch nicht, weil der Konstruktor der Klasse A sonst keine Parameter haben dürfte.
Parameter darf er haben, er könnte nur nicht von außerhalb der Klasse aufgerufen werden.

Wo genau liegt denn der Sinn in dem, was du da machen willst?

Es heißt übrigens
PHP-Code:
parent::__construct(); 
Kleiner Umweg:
PHP-Code:
<?php

    
class {
      public function 
__construct($param$param2) {
          echo 
__CLASS__;
      }
    }
    
    class 
extends A{
      public function 
__construct() {
        if(
false) {
            
parent::__construct('afa','asfa');
        }
        else {
            echo 
__CLASS__;
        }
      }
    } 
    
    
    
$obj = new B();
    
?>
Für mich erschließt sich wie gesagt der Grund nicht so wirklich.


EDIT:
Mein Beispiel ist totaler Quatsch. lol ... dann könntest du den Superkonstruktor auch gar nicht aufrufen .. ohweia .. erstmal richtig wach werden.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 15:35 Nach oben    #3
Jay
Gast
 
Beiträge: n/a
Standard

Im Konstruktor der ersten Klasse (zB A) werden bestimme Dinge erledigt, die nur einmal erledigt werden dürfen.

Wenn jetzt eine zweite Klasse den Konstruktor der ersten Klasse erneut aufruft wäre es möglich das gesamte System bezüglich Rechte zu hintergehen.

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 15:44 Nach oben    #4
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

PHP-Code:
public function __construct()
{
    static 
$done;
    
    if ( 
$done )
    {
        return;
    }
    
    
tuwas();
    
    
$done true;

__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 16:32 Nach oben    #5
Jay
Gast
 
Beiträge: n/a
Standard

Genau das habe ich gesucht!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 16:41 Nach oben    #6
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Mein Listing ist nicht ganz richtig. Eigentlich muss es so aussehen:
PHP-Code:
class Test
{
    private static 
$done;
    
    public function 
__construct()
    {
        if ( 
self::$done )
        {
            return;
        }
        
        
tuwas();
        
        
self::$done true;
        
        return;
    }

__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 16:43 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich wollte gerade sagen. Du solltest die statische Variable schon klassenweit verfügbar machen und somit dann natürlich auch in den erbenden Klassen.

Aber feine Lösung. *Thumbs Up*
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 16:45 Nach oben    #8
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Danke, Chef
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.01.2006, 13:26 Nach oben    #9
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Der Code oben ist etwas unstabiel, wie ich finde.
PHP-Code:
class Test
{
    private static 
$done false;
    protected 
$object null;
    
    public function 
__construct()
    {
        if ( 
self::$done )
        {
            return;
        }
        
        
$this->object = new stdClass();
        
        
self::$done true;
        
        return;
    }
    
    public function 
getObject() {
        return 
$this->object;
    }
}

$foo = new Test();
$bar = new Test();

var_dump($foo->getObject());
var_dump($bar->getObject()); 
Wäre hier nicht ein Singelton Pattern angebrachter?
PHP-Code:
class Test
{
    private static 
$instance null;
    protected 
$object null;

    private function 
__construct()
    {        
        
$this->object = new stdClass();
    }
    
    public function 
getObject() {
        return 
$this->object;
    }
    
    public static function 
getInstance() {
        if (
self::$instance === null) {
            
self::$instance = new self();
        }
        return 
self::$instance;
    }
}

$foo Test::getInstance();
$bar Test::getInstance();

var_dump($foo->getObject());
var_dump($bar->getObject()); 
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)

Geändert von dejan_spasic (09.01.2006 um 13:33 Uhr).
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.01.2006, 15:36 Nach oben    #10
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Sollte auch nur das Prinzip, das ich zu vermitteln versuchte, näherbringen
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Vererbung (PHP) kari01 PHP-Programmierung 21 13.09.2006 19:56
Logisches Problem beim einsatz von Ereignissen Prophet Allgemeine Java-Programmierung 19 05.06.2006 22:08
Problem mit Cookie und Reloads... Bookworm PHP-Programmierung 10 13.04.2006 12:09
Wie beginnne ich eine Seite mit Oop richtig? ex³ PHP-Programmierung 9 01.11.2005 17:38
OSX + Eclipse 3.1 Problem bacarni Eclipse 3 29.07.2005 21:19


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:12 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44