Posielanie instancie do X tried – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Posielanie instancie do X tried – PHP – Fórum – Programujte.comPosielanie instancie do X tried – PHP – Fórum – Programujte.com

 

NiX
~ Anonymní uživatel
6 příspěvků
26. 2. 2017   #1
-
0
-

Caute chcem sa opitat, nakolko nikde som nenasiel uspokojivu odpoved, v kazdom clanku pre zaciatocnikov o OOP sa v podstate rozoberaju len uplne zaklady.

Vytvorim si nejaky objekt triedy. Ten nasledne dodavam do dalsich X Y objektov cez new trieda( $this ), kde si ho ulozim do properties v konstruktore. Bude ten objekt stale rovnaky, aj ked v nom nieco zmenim, bude zmena ukamzite k dispozicii v kazdej triede kde som tento objekt dodal?

Nekopiruje sa ten objekt, a zbytocne to neplni pamat ci vykon? , alebo je to len akysi odkaz v pamati na prvotnu instanciu a vsetkych ostatne objekty pracuju priamo s nim?

Nahlásit jako SPAM
IP: 188.123.100.–
Kit+14
Guru
26. 2. 2017   #2
-
0
-

#1 NiX
Objekt se v takových případech nekopíruje, předává se odkazem. Pokud ho injektuješ do více instancí, bude to stále týž objekt.

Přesně opačně se chovají pole - do funkcí a metod se předávají hodnotou. Nemusíš se však obávat ztráty výkonu. Pole se fyzicky kopíruje až tehdy, když se ho uvnitř funkce pokusíš změnit.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:cdfd:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+14
Guru
26. 2. 2017   #3
-
0
-

#1 NiX
Ujasni si vztah mezi objektem a třídou. Pokud manipuluješ s objektem, na třídu to nemá žádný vliv. Třída je jen jakousi šablonou pro vytváření objektů, které si pak žijí svým životem. Třída sice také může nést nějaké informace, ale je dobré se tomu vyhýbat (s výjimkou konstant).

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3619 příspěvků
27. 2. 2017   #4
-
0
-

Jj, jak pise Kit. Trida/class je jakasi sablona. Kdyz udeles $x = new trida;, tak php z toho vyrobi teprve objekt. Kdyz to pouzijes 10x a zitra upravis sablonu, tak se to zmeni ve vsem, co tu tridu pouziva, cili $x = new trida; atd.
Je to neco jako sablona v html / css. Udelas si vzhled stranek a pak uz tam davas jen obsah. Kdyz neco zmenis v sablone, zmeni se to vsude, kde ji pouzivas, takze cely web.

Jako, je mozne pouzivat i tridu jako ukladaci prostor, ale tez bych to nedelal. Se s tim da pracovat jako trida::funkce(),  trida::promenna.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:f009:2c...–
NiX
~ Anonymní uživatel
6 příspěvků
27. 2. 2017   #5
-
0
-

dakujem, viem ze trochu pletiem nazvoslovie.. trieda je sablona s ktorej sa vyrobi objekt.. nieco ako plan domu je trieda a kazdy postaveny dom podla planu je objekt..

Cize:

$object = new Trieda();

$dom = new Dom($object);

$strom = new Strom($object);

$les = new Les($object);

$object->setProperty = 'value';

v objektoch Dom, Strom, Les najdem vlastnost $param s hodnotou 'value' (samozrejme az po jej vytvoreni). A v pamati bude stale len jeden objekt Trieda. Spravne to chapem, ano?

Nahlásit jako SPAM
IP: 188.123.100.–
peter
~ Anonymní uživatel
3619 příspěvků
27. 2. 2017   #6
-
0
-

Jo. Jestli to napises takhle, dak konstruktoru objektu $dom predas link na $object. Takze, pak v todmu muzes menit vlastnosti $objekt. Ale muzes to delat i pres objekt.

class DOM {
public $obj;
function __construct ($obj)
  {
  $this->obj = $obj;
  }
}
$object = new Trieda();
$dom = new Dom($object);
$dom->obj->neco = 123;

//nebo to muzes nastavit private a dostanes se tam jen z funkci uvnitr
class DOM {
private $obj;
function __construct ($obj)
  {
  $this->obj = $obj;
  }
function funkceX()
  {
  $this->obj->neco = 123;
  }
}
$object = new Trieda();
$dom = new Dom($object);
$dom->obj->neco = 123; // error
$dom->funkceX();

//nebo primo (vse plti za predpokladu, ze i $neco v $object je public)
$object->neco = 345;

Nahlásit jako SPAM
IP: 2001:718:2601:26c:f009:2c...–
NiX
~ Anonymní uživatel
6 příspěvků
28. 2. 2017   #7
-
0
-

dakujem

Nahlásit jako SPAM
IP: 188.123.100.–
Kit+14
Guru
28. 2. 2017   #8
-
0
-

#5 NiX
S tím posledním řádkem 

$object->setProperty = 'value';

se nikde nesetkáš. Obvykle uvidíš některou z variant: 

$object->property = 'value';
$object->setProperty('value');

Správně jsou obě dvě, druhá dá o něco víc práce. Někteří dávají přednost druhému zápisu, sám se vyhýbám oběma.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:4858:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NiX
~ Anonymní uživatel
6 příspěvků
1. 3. 2017   #9
-
0
-

#8 Kit
uff to som sa pomylil, myslel som tvoju druhu variantu :)

aky zapis teda pouzivas, ak nie ziaden s uvedenych?

Nahlásit jako SPAM
IP: 188.123.100.–
Kit+14
Guru
1. 3. 2017   #10
-
0
-

#9 NiX
Zpravidla některou z těchto podle sémantiky: 

$object = new Třída('value');
$object->add('value');
$object->update('value');
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:a83e:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3619 příspěvků
2. 3. 2017   #11
-
0
-

Ja si zvykl pouzivat spis databazove select / insert / delete / update. Kvuli jednotnosti. Klidne je mozne pouzit change, add, delete, remove, destroy a pod, ale pak mas v jedne tride remove a ve druhe delete.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:1417:16...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Posielanie emailu — založil bugisoft

Posielanie HTML emailov — založil Smokie

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý