| Autor | Zpráva | ||
|---|---|---|---|
| Flash Profil * |
#1 · Zasláno: 8. 12. 2007, 04:41:41
Hezký den přeju. Tak nějak sem v poslední době skejsnul u OOP v PHP a měl bych takovej začátečnickej dotaz. Budu mít tři soubory :
index.php :
<?php
require_once 'class1.php';
$render = new render;
require_once 'class2.php';
$main = new main;
?>
class1.php :
<?php
class render
{
public function write($message)
{
echo $message;
}
}
?>
a class2.php
<?php
class main
{
function main ()
{
}
}
?>
no a ted budu potřebovat zavolat v constructoru třídy MAIN metodu WRITE ze třídy RENDER. Abych se k této metodě dostal z třídy main musím jí zavolat staticky tedy : render::write('text'); jenže to mi zrovna dvakrát nevyhovuje. Jak lze přistupovat k metodám jiných tříd anichž bych je musel volat staticky?? Nepohrdnul bych ani článkem s tématikou volání metod, kdyby někdo o něčem věděl. Dik moc |
||
| Keilew Profil |
#2 · Zasláno: 8. 12. 2007, 08:56:58
Z principu OOP je tato otázka blbost. Třída je soubor dat (proměnné) a metod (function) pro práci s nimi. Jakmile musíš pro práci s daty jedné třídy volat metodu třídy jiné, je obyčejně něco špatně. Často jde o tzv. těsnou vazbu. Takže by to chtělo nastudovat opravdové vlastnosti návrhů OOP, není to totiž jen o zabalení funkcí a proměnných do bloku s názvem class.
|
||
| Flash Profil * |
#3 · Zasláno: 8. 12. 2007, 09:57:31
Keilew
Jakmile musíš pro práci s daty jedné třídy volat metodu třídy jiné, je obyčejně něco špatně. Ano jistě to chápu, ale to není zrovna tato situace. Nevolám metodu z jiné třídy, abych mohl pracovat s daty původní třídy. Volám metodu ze třídy, která nemá s tou druhou vůbec nic společného a ani nemá vliv na její funkci. Volám funkce, které slouží pro tvorbu log a debug souborů. |
||
| Keilew Profil |
#4 · Zasláno: 8. 12. 2007, 10:22:41
Flash
Pak jedině static, nebo prostě volat nějakou funkci, která není součástí žádného modelu, nebo volat pořes instanci objektu. |
||
| Joker Profil |
#5 · Zasláno: 8. 12. 2007, 10:23:41
Keilew
Já bych to trochu upřesnil: Metody jiné třídy ve svojí třídě používat jde- obvykle tak, že se z nich udělají metody té svojí třídy :-) Pokud funkčnost mojí třídy má obsahovat funkčnost jiné třídy, obvykle je to ze dvou důvodů: - ve skutečnosti ta moje třída i ta druhá patří do nějaké větší kategorie objektů, kterým je toto chování společné. Příklad: řekněme, že třída Motorka má metodu akceleruj(). Tu bych potřeboval i pro třídu Automobil. Ale ve skutečnosti akcelerace není funkčnost specifická pro motorku, ale obecná pro všechny dopravní prostředky (resp. pro jakýkoliv objekt, ale zjednodušme to). Pro takové situace je v OOP dědění: správné řešení by bylo zavést například třídu Dopravní prostředek, která by měla mj. metodu akceleruj() a třídy Motorka a Automobil by byly její specializace a metodu by zdědily. - ve skutečnosti je jedna z těch tříd součástí druhé. Například řekněme, že mám třídu Motor, která má metodu nastartuj() a chci jí využít i pro třídu Automobil. Ve skutečnosti je ale motor součástí automobilu s veškerou svou funkčností a atributy. Taková situace se v OOP řeší skládáním: třída Automobil by měla obsahovat atribut typu Motor. |
||
| Keilew Profil |
#6 · Zasláno: 8. 12. 2007, 10:34:46
Joker
Ano, máš naprostou pravdu, jen jsem to nechtěl pitvat. Zahrnul jsem to do tvrzení, že by to chtělo nastudovat opravdové vlastnosti návrhů OOP;-) |
||
|
Časová prodleva: 18 let
|
|||
0