PHP baráti osztályok vagy ilyesmi
Sziasztok, az a baj, hogy pontosan nem is tudom, hogy mit szeretnék, emiatt a Google egyelőre nem barátom... :(
Adott egy nagy osztály, benne több private tagfüggvénnyel. Egy átalakítás során viszont ezt szét kellene szedni több osztállyá. A bővíthetőség miatt néhány funkciót le kell választani. (az átalakítás után azt szeretném, hogy egyes funkciókat a Stratégia tervezési minta alapján külön osztályok felügyeljék)
A problémám, az új osztályok ne legyenek az eredeti osztály gyermekei, de néhány private függvényre mégis szükség lenne. Jelenleg ezt csak úgy tudtam orvosolni, hogy minden 1. átadom az eredeti objektumot, ez mondjuk nem is baj, 2. az összes private-ből public-ot csináltam, na ez nem tetszik.Java-ban van valami olyasmi, hogy egyik osztályban hozom létre a másik osztályt és akkor ott a privát változókat elérem, C++-ben van valami baráti osztály, PHP-ben van valami ilyesmi?
Remélem nem nagyon kusza amit írtam. Merre induljak el keresgélni?
■ Adott egy nagy osztály, benne több private tagfüggvénnyel. Egy átalakítás során viszont ezt szét kellene szedni több osztállyá. A bővíthetőség miatt néhány funkciót le kell választani. (az átalakítás után azt szeretném, hogy egyes funkciókat a Stratégia tervezési minta alapján külön osztályok felügyeljék)
A problémám, az új osztályok ne legyenek az eredeti osztály gyermekei, de néhány private függvényre mégis szükség lenne. Jelenleg ezt csak úgy tudtam orvosolni, hogy minden 1. átadom az eredeti objektumot, ez mondjuk nem is baj, 2. az összes private-ből public-ot csináltam, na ez nem tetszik.
class MyClass {
public function __construct () {
$a = new StrategyA($this);
$a->foo();
}
private function foo () {
return 'foo';
}
}
class StrategyA {
private $owner;
public function __construct(MyClass $owner) {
$this->owner = $owner;
}
public function foo () {
echo $this->owner->foo();
}
}
new MyClass();
Remélem nem nagyon kusza amit írtam. Merre induljak el keresgélni?
Leszármazott
protected
láthatóságot, azokhoz hozzáférhetsz, és felül is írhatod, de csak akkor, ha abból az osztályból származik az osztályod. Illetve használhatszabstract
osztályokat, hogy abból származtasd a tényleges osztályaidat, de mégis legyenek közös implementált metódusaik, illetveinterface
-eket, hogy definiálni tudj adni egy közös felületet az osztályaid között. Egyáltalán miért van szükséged aprivate
tulajdonságokra?Re: Leszármazott
A probléma, hogy az osztály kinőtte magát és emiatt át kell alakítani. Számomra a megfelelő átalakítás meg nem a specializálás, hanem részfeladatok leválasztása. Erre keresek valami olyan opciót, mint a Java nyelvben a beágyazott osztályok. Vagy ennek valami szimulációja.
package scope-nak hívják