Pridanie vlastnosti objektu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
xrep
Člen | 51
+
-8
-

Ahoj,

mam:

class A {
}

potrebujem spravit

$a = new A();
$a->ahoj = "Ahoj"

v čistom PHP to ide, Nette to „ošetruje“ ako to obidem?

Vďaka..

Azathoth
Člen | 495
+
+1
-

Protož tohle je prasárna na není to čisté. Jestli chceš mít ve třídě A property ahoj, tak si ji nadeklaruj ve třídě A a nepřidávej ji dynamicky.

xrep
Člen | 51
+
0
-

Ale ja som sa nepýtal prečo to nejde a taktiež som sa nepýtal na tvoj názor na „prasárnu“ :) Ja sa pýtam ako sa to dá obísť. Nadeklarovať si property staticky v tomto prípade nie je možné

Editoval xrep (18. 4. 2015 14:04)

Filip Procházka
Moderator | 4668
+
+3
-

Pokud potřebuješ dynamicky skládat properties, použij stdClass

$a = new stdClass();
$a->ahoj = "Ahoj"

nebo pole, které přetypuješ na objekt (opět vrátí stdClass)

$a = array('ahoj' => "Ahoj");
$a = (object) $a;

Nette\Object zabraňuje dynamickému deklarování properties, protože v modelech, presenterech ani v podobných třídách žádné takové prasárny dělat nemáš. Obejít to nejde.

Nehledě na to že od nějaké 5.4 je to optimalizované, takže když nadeklaruješ properties předem, tak je pak práce s třídou rychlejší.

xrep
Člen | 51
+
0
-

Trieda A je Doctrine entita, akože ja tam môžem nadefinovať vlastnosť bez anotácie, Doctrine stĺpec nevytvorí, ale to mi nepríde zrovna rozumné, kedže sa tá vlastnosť bude využívať v jednom prípade z XYZ.
V jednoduchosti mam produkt, objednávku, a potom M:N tabulku kde to párujem, a tam si vediem ktorý produkt sa v ktorej objednávke objednal kolko-krát.
Vtip je v tom že to potom potrebujem nejako napasovať do šablóny, a ku triede produkt (trieda A) by mi stačilo pridať na tú chvilku ďalšiu vlastnosť a to kolko krát to bolo kúpené v danej objednávke. V šablóne by sa s tým potom pracovalo jednoduchšie.
Momentálne si vytváram si vytváram array v presenteri v ktorom napárujem produkt a kolko-krat bol zakupeny v objednavke, a to potom vypisujem v šablóne to je ale menej čitatelné ako $oProduct->oCnt, čo by som dosiahol doplnením vlastnosti.

Každopádne vďaka za odpoveď

Filip Klimeš
Nette Blogger | 156
+
+2
-

Jestli to chápu správně z komentáře, tak dopředu víš, že budeš potřebovat počet kusů produktu v jedné objednávce. Takže proměnnou staticky vytvořit lze.

Navíc, pokud jsem to pochopil, máš tuto informaci přímo ve vazebné M:N tabulce. Můžeš tedy přistoupit přímo k jejímu záznamu, který vybereš podle id produktu a objednávky. Pokud ne, napiš si do entity nějakou funkci, která ti to spočte, a nepotřebuješ property.

Nette ti bude házet klacky pod nohy, pokud se budeš snažit dělat věci tak, jak se dělat nemají.

Editoval Filip Klimeš (19. 4. 2015 15:02)