Získávání sub objektů z objektu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Získávání sub objektů z objektu – PHP – Fórum – Programujte.comZískávání sub objektů z objektu – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Beepvix0
Duch
10. 6. 2014   #1
-
0
-

Dobrý den, nejsem žádný PHP expert a proto bych potřeboval poradit, nebo aspoň nasměrovat jak co nejelegantněji vyřešit můj problém.

Dejme tomu, že mám nějaký článek v databázi, ten článek má autora, kategorii a další nepodstatné věci. Článek je reprezentován objektem Article kde je autor a kategorie zapsané jako číslo. Taktéž ale obsahuje objekt authorObject a categoryObject. Tyto objekty jsou vlastně reprezentace uživatele a kategorie místo čísla, jako objekt. Tzn můžu volat takto

$myArticle = $factory->getByID(2);
print($myArticle->author->info->name);
print($myArticle->author->mail);
print($myArticle->category->name);

a tak podobně... myslím, že je to jasné.

Teď ale k mému problému. Bude nastávat hodně případů, kdy ty objekty (autor, kategorie) tam chtít nebudu (nebudu je využívat), tak proč bych je tahal z databáze zbytečně? Přemýšlel jsem, že bych to mohl vyřešit hned v získávání objektu pomocí metody "getByID" tímto stylem.

public function getByID($id = int, [$category], [$author]){
    // podle toho jestli $author nebo $category není null
    // tak se budou vracet ty instance
    // pokud null budou oba, tak se samozřejmě vrátí jen holý objekt článku bez sub objektů
}

Jak už jsem psal, nejsem velký znalec PHP... ale příjde mi to jako prasárna tohle se mi rozhodně nelíbí

$article = $factory->getByID(2, true, true); 
$article = $factory->getByID(2, false, true); // fuj

Nebyl by jednodušší způsob? Musím psát parametr 2 i když ho nechci.

Představoval bych si to nějak takto? 

$article = $factory->getByID(2, INS_CATEGORY | INS_AUTHOR);
// <- chci oba
$article = $factory->getByID(2, INS_AUTHOR);
// <- chci jen autora
$article = $factory->getByID(2, INS_CATEGORY);
// <- pouze kategorie

Nevím jestli toto PHP vůbec podporuje a doufám, že jste mě pochopili. Předem díky za každou odpověď!

Nahlásit jako SPAM
IP: 188.175.140.–
Řešení
Beepvix0
Duch
10. 6. 2014   #2
-
0
-
Vyřešeno Nejlepší odpověď

Tak nakonec to udělám asi následovně:

define('INS_ALL', '0x01');
define('INS_CTG', '0x02');
define('INS_AUTHOR', '0x03');

foo($flags)
{
   //
}

// a zavolám

foo( INS_ALL );
foo( INS_CTG | INS_AUTHOR );

Pokud by jste měli lepší nápad / řešení tak mi ho sem prosím napiště (označím to jako vyřešené :) )

Nahlásit jako SPAM
IP: 188.175.140.–
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, 4 hosté

Podobná vlákna

Kopie objektu — založil Redby

Proměné v objektu — založil Kall_Ell

Databáze objektů — založil Danal

Uložení objektu — založil ghoull

Kresleni objektu — založil javaman

 

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