• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Private und Protected

Status
Für weitere Antworten geschlossen.

Prophet

Super-Moderator
Moderator
Also mit private mache ich eine Variable nur für die klasse zugänglich mit protected auch für alle erbenden klassen.

jetzt stellt sich für mich die frage wie ich mit einer ererbten protected eigenschaft arbeite. varianten die mir einfallen sind:
Code:
$this->eigentschaft;
$parent->eigenschaft;
$klassen_name->eigenschaft;
klassen_name::eigenschaft;
parent::eigenschaft;

doch welche ist die richtige? wenn es die this variant ist dann stellt sich für mich die frage was passiert wenn in der aktuellen klasse eine weitere eigenschaft mit dem selben namen ist. oder darf man den selben eigenschaftsnamen während eine vererbung nicht doppelt verwenden? (das problem tritt auch bei parent auf.)

mfg Prophet
 
Werbung:
Code:
$this->eigenschaft
ist die richtige Variante.
Code:
klassen_name::eigenschaft
geht auch, aber nur bei statischen Membern.

Wenn Du einen protected-Member doppelt belegst, dann existiert der Member auch nur ein Mal. Ansonsten würde es schwierig, welcher jetzt genau gemeint ist. In den meisten Fällen gibt das dann natürlich Probleme... Deswegen sollte man das besser auch nicht machen :wink:
 
Werbung:
das mit der ueberlagerung der variablen ist kein problem, da man in der sauberen objektorientierten programmierung die variablen ueber set und get funktionen modifiziert. solltest du dann auch die funktionen ueberlagern, kannst du die eltern funktion ueber parent::getVarName() aufrufen.

getVarName() muss natuerlich von dir erstellt worden sein
 
da hast du natürlich recht aber wenn ich die variable als protected deklariere dann kann ich ja auch gleich darauf zugreifen...

oder würdest du mir von protected vars abraten?
 
Wenn man eine protected Member Variable überlagert, dann kann es ungewollte Seiteneffekte geben.
[php:1:240601002d]<?php
class A {

protected $member;

public function setA($v) { $this->member = $v; }
public function getA() { return $this->member; }
}

class B extends A {

protected $member;

public function setB($v) { $this->member = $v; }
public function getB() { return $this->member; }
}

$b = new B();

$b->setB('b');
$b->setA('a');

echo $b->getB();
?>[/php:1:240601002d]gibt 'a' aus. Wenn "member" private ist, dann kommt 'b' raus.

Bei geerbten Membern kann man meiner Meinung nach auch direkt auf protected Member zugreifen. Dafür sind sie ja da. Member, die wirklich nur in einer Klasse benutzt werden, kann man ja private machen.

Bei allen Gettern und Settern muss man auch bedenken, dass PHP-Skripte interpretiert werden und Methodenaufrufe so ziemlich das langsamste sind. Für die saubere Programmierung sind sie natürlich gut, aber OOP im C++, Java oder Smaltalk Stil in PHP anzuwenden halte ich nicht für sinnvoll.
 
Werbung:
Wenn Du willst, dass von dieser Klasse erbende Klassen direkt auf den Member zugreifen können: ja.

Wenn es sich bei dem Member um sensitive/kritische/uninteressanten Daten handelt, von denen abgeleitete Klassen nix wissen dürfen/sollen/wollen: nein -> private.
 
ok die frage habe ich auch mehr gestellt weil das ganz wie gesagt auch komplett mit funktionene zu regeln gewesen wär...
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben