Autor | Zpráva | ||
---|---|---|---|
HonzaM Profil * |
#1 · Zasláno: 2. 11. 2012, 15:45:55
Ahoj, potřeboval bych poradit s referencemi na objekt. Mám nějaký takovýto kod:
class Pokus { private $x = null; public function __construct(Pokus1 &$obj) { $this->x = $obj; } public function GetPokus1($i) { $this->x->SetCislo($i); return $this->x->GetCislo(); } } class Pokus1 { private $int; public function __construct($i) { $this->int = $i; } public function SetCislo($i) { $this->int = $i; } public function GetCislo() { return $this->int; } } i include "Pokus.php"; $p1 = new Pokus1(10); echo $p1->GetCislo()."<br>"; //Vrátí 10 $pokus = new Pokus(&$p1); echo $pokus->GetPokus1(100)."<br>"; //Vrátí 100 echo $p1->GetCislo() Tento kod mi ale hlásí chybu: Call-time pass-by-reference has been removed na řádku s $pokus = new Pokus(&$p1); Co je na tom špatně? Teprve s referencemi začínám a pořádně jim nerozumím. Když tam nemám & tak mi to vypíše 10 100 100 a když se mi tam povede dám ten & tak by to mělo vypisovat 10 100 10 že jo? Díky za vysvětlení a pomoc :) |
||
Majkl578 Profil |
#2 · Zasláno: 2. 11. 2012, 15:56:58
HonzaM:
„Co je na tom špatně?“ Reference nelze používat při volání funkcí/metod. Objekty se předávají by-reference automaticky, není třeba používat & pro objekty (až na velmi specifické případy, které v 99.9% nebudeš nikdy potřebovat).
Nauč se logicky pojmenovávat třídy a metody, Pokus a Pokus1 nedávají smysl a jsou matoucí.
|
||
HonzaM Profil * |
#3 · Zasláno: 2. 11. 2012, 16:03:49
Jasně, ty názvy tam byly jenomtak narychlo napsané...Já dělám třídu Form, která bude mít metodu AddElement a do ní chci dávat objekty Input, SelectBox, TextArea...Myslel jsem že bude lepší dělat to pomocí referencí, že by to bylo rychlejší
|
||
Majkl578 Profil |
HonzaM:
„bude lepší“ Nebude. „by to bylo rychlejší“ Nebylo, navíc to ani nedává smysl (viz můj předchozí příspěvek). Tohle je zbytečná paranoia, primárně by objektový návrh aplikace neměl být přímo ovlivněn snahou o co nejefektivněší kód, pak bys mohl rovnou psát procedurální kód, který je zákonitě rychlejší / méně náročný. „Já dělám třídu Form“ Máš nějaký důvod nepoužít již hotové existující řešení? Například Nette framework má zrovna formuláře dobře vyřešené (dokumentace, API), přinejmenším se můžeš inspirovat z pohledu objektového návrhu. |
||
HonzaM Profil * |
#5 · Zasláno: 2. 11. 2012, 16:13:24
Tak použít třeba Nette bych mohl, koukal jsem jak to tam řeší, tohle dělám spíš z nudy abych si procvičil OOP :)
Takže teda reference není třeba používat? |
||
Alphard Profil |
#6 · Zasláno: 2. 11. 2012, 17:10:21
HonzaM:
„Takže teda reference není třeba používat?“ Majkl to napsal 2x, pak už asi neměl sílu :-) Jestli nevěříte, viz manuál http://php.net/manual/en/language.oop5.references.php. |
||
Časová prodleva: 11 let
|
0