[ Príspevkov: 26 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
NapísalOffline : 03.01.2010 13:05 | Dynamické objekty

Ahoj,
chcem sa spýtať či neviete ako vytvoriť dynamické objekty.
V PHP sa s nimi stretneme napríklad v SimpleXML, kde máme XML:
Kód:
<koren>
 <vetva>
  <vetva2>
   <vetva3>
    Text
   </vetva3>
  </vetva2>
 </vetva>
</koren>


A v PHP k tomu pristupujeme:
Kód:
echo $Simple_XML_koren -> vetva -> vetva2 -> vetva3;


Teda dynamicky sa nám vytvárajú objekty vetva, vetva2, vetva3, ktoré majú svoje metódy a premenné.

Chcem vytvoriť niečo podobné s poliami, ale neviem ako vytvoriť tieto dynamické objekty.

Za odpovede ďakujem.


Offline

Užívateľ
Užívateľ
Dynamické objekty

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6
NapísalOffline : 03.01.2010 13:20 | Dynamické objekty

sice neviem co myslis ale ak fakt chces vytvarat objekty s naplnenim aributov tak nato pouzijes konstruktor a popripade si mozes pozret iteraciu
Kód:
http://sk2.php.net/manual/en/language.oop5.php


az chces len polia zmenit na objekty ci jak tak PHP je dynamicky jazyk teda kazda premenna je dynamicky vytvorena a moze byt dynamicky zrusena
Kód:
$x="a";
$a->$x=" ahoj";
$a->b=" nazdar";

echo $a->a.$a->b;


Offline

Čestný člen
Čestný člen
Dynamické objekty

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 03.01.2010 13:30 | Dynamické objekty

Ja som tiez nepochopil, ale mozno sa ti budu hodit magicke metody __get() a __set(). Nieco taketo (pisane z hlavy):
Kód:
class foo
{
   private $data = array('a'=>'foo','b'=>'bar','c'=>'baz');
   public function __get($k)
   {
      return $this->data[$k];
   }
}
$foo = new foo();
echo $foo->a;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 03.01.2010 13:42 | Dynamické objekty

No veľmi si mi nepomohol.
Konštrukor: Viem čo to je, ale netuším ako ho v tomto prípade použiť.
Dynamické premenné: Ako to ale naprogramovať v triede.

Aby sme si rozumeli, chcel by som fungovať zhruba takto:
Kód:
$array = array(
 
 "polozka" => array(
                        "nieco" => array(
                                "vlastnost" => "hodnota",
                                "vlastnost2" => "hodnota2"
                         ),
                        "nieco2" => array(
                                "vlastnost3" => "hodnota3",
                                "vlastnost4" => "hodnota4"
                         )
                ),
 "polozka2" => "hodnota5"
);

$object = new MyClass($array);

echo $object -> polozka -> nieco -> vlastnost; // Vypíše "hodnota"
echo $object -> polozka -> nieco2 -> vlastnost4; // Vypíše "hodnota4"
echo $object -> polozka -> length(); // Metóda triedy MyClass; vypíše 2
echo $object -> polozka2; // Vypíše "hodnota5"


V mojom príklade sa "dynamicky vytvorili objekty" (polozka, polozka2, nieco, nieco2, vlastnost, vlastnost2, vlastnost3, vlastnost4). Ja sa ale pýtam, ako naprogramovať takúto dynamickú triedu.

//Edit: Ďuri: pozriem, toto vyzerá zaujímavo


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 03.01.2010 13:44 | Dynamické objekty

Velmi jednoduche:
Kód:
function toObject($data) {
    return is_array($data) ? (object) array_map(__FUNCTION__, $data) : $data;
}


hned druhy komentar na http://sk2.php.net/manual/en/function.g ... t-vars.php


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 03.01.2010 13:54 | Dynamické objekty

Lenže potom ako vytvorím danej triede metódy?


Offline

Užívateľ
Užívateľ
Dynamické objekty

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6
NapísalOffline : 03.01.2010 14:41 | Dynamické objekty

v deklaracii tej triedy
Kód:
class MyClass{
//atributy cez var sa mi zda ako var $dlzka,$farba
function MyClass($array){ $self->... }//tam sprav te objekty z toho pola self znamena ten objekt ked mas $object=new MyClass($array); tak $self by malo prisluchat $object alebo by to malo byt $this? teraz neviem

//...
//tu budu dalsie metody(funkcie) mozu byt verejne aj sukromne hadam
//...
}
//mas pole
$array=[......]

$object=new MyClass($array);//konstruktor sa vola pri vytvoreni objektu
//a tadaaaa mas to

viac vediet nepotrebujes
a k tomu vytvoreniu jak som pisal tam ↑↑↑↑vyssie ↑↑↑↑
mas pole napr
Kód:
$array["prve"]["prve"]["prve"]=5;
$array["prve"]["druhe"]["prve"]=15;
$array["prve"]["druhe"]["tretie"]=1;
//a spracovavame dynamicky ako aj s polom pretoze php je dynamicke cele asi aj konstanty su dynamicke ale define asi ne dovie

$key1="prve";
$key2="druhe";
$key3="tretie";
$objekt->$key1->$key1->$key1=$array["prve"]["prve"]["prve"];
$objekt->$key1->$key2->$key1=$array["prve"]["druhe"]["prve"];
$objekt->$key1->$key2->$key3=$array["prve"]["druhe"]["tretie"];
a pre vseobecne pouzitie poznas hadamn
Kód:
foreach($array as $keys=>$values)


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 03.01.2010 16:05 | Dynamické objekty

Tominator píše:
Lenže potom ako vytvorím danej triede metódy?

aha, v tom pripade to treba spravit trosku inak, kedze potrebujes definovat vlastnu triedu:
napriklad si nakodis rekurzivnu funkciu prechadzajucu tvojim polom, v ktorej budes vytvarat novy objekt pri kazdom kluci, ktoreho hodnota je dalsie pole:
Kód:
$obj->$key = new MyClass;

v opacnom pripade len:
Kód:
$obj->$key = $value;

Vysledok bude presne to, co si potreboval (nezabudni na zachovanie struktury):
Kód:
MyClass Object
(
    [polozka] => MyClass Object
        (
            [nieco] => MyClass Object
                (
                    [vlastnost] => hodnota
                    [vlastnost2] => hodnota2
                )

            [nieco2] => MyClass Object
                (
                    [vlastnost3] => hodnota3
                    [vlastnost4] => hodnota4
                )

        )

    [polozka2] => hodnota5
)


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 03.01.2010 22:42 | Dynamické objekty

juho: Veľmi si mi znova nepomohol, to hore s tým konštruktorom nebolo také jednoduché. To druhé je zas príliš pracné :)

stenley: áno, dosť podobne som to vyriešil.


Už mi to funguje. V triede mi už nefungovala, tá funkcia, čo tu dal stenley (kto vie prečo?), takže som použil inú funkciu auž to šľape.

Ďakujem juhovi za snahu a stenleymu za riešenia :) (samozrejme aj Ďurimu :))


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 03.01.2010 22:59 | Dynamické objekty

Tominator píše:
V triede mi už nefungovala, tá funkcia, čo tu dal stenley (kto vie prečo?)

mozno si to len zle zapisal :)

Tominator píše:
takže som použil inú funkciu auž to šľape

mohol by si sem postnut tu tvoju funkciu... ak by v buducnosti niekto riesil podobny problem, nech to tu je vsetko pokope...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 11:09 | Dynamické objekty

Takže ešte som sa s tým hral, takže ak chcete aby vám tá (stenleyho) funkcia fungovala v triede musíte ju upraviť na:
Kód:
function toObject($data) {
          return is_array($data) ? (object) array_map(array($this,__FUNCTION__), $data) : $data;
        }


Ak Vám to nebude fungovať tak môžete použiť funkciu:
Kód:
function array2object($data) {
   if(!is_array($data)) return $data;
   
   $object = new stdClass();
   if (is_array($data) && count($data) > 0) {
      foreach ($data as $name=>$value) {
         $name = strtolower(trim($name));
         if (!empty($name)) {
            $object->$name = array2object($value);
         }
      }
   }
   return $object;
}

Ktorú si budete musieť tiež upraviť pre triedu.


Ešte mám otázku - vzniká mi zápis:
Citácia:
["Nieco"]=>
object(stdClass)#5 (3) {
[0]=>
object(stdClass)#2 (14) {
[0]=>
string(1) "3"
["ID"]=>
string(1) "3"
[1]=>
string(1) "1"
["PID"]=>
string(1) "1"
....

Teda v jednoduchosti:
Kód:
Nieco -> 0 -> ID/PID
Akurát, že nemôžem zapísať Nieco -> 0, lebo to hlási chybu. Teda ako to zapísať ak je číslo objekt?


Offline

Čestný člen
Čestný člen
Dynamické objekty

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 04.01.2010 11:12 | Dynamické objekty

Neviem, ci to pojde, ale skus Nieco->{0}->ID.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 11:21 | Dynamické objekty

Nefunguje. Na otestovanie používam:
Kód:
var_dump($asd -> Nieco -> {0});
a vypíše mi NULL, ak dám $asd -> Nieco tak mám kompletný výpis.


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 11:28 | Dynamické objekty

Kód:
$asd -> Nieco -> {'0'}


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 11:39 | Dynamické objekty

tiež nejde


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 11:44 | Dynamické objekty

akoze nejde? mne to funguje bez problemov aj pre objekt, aj pre premennu...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 12:22 | Dynamické objekty

No nejde no :D

Mám v PHP:
Kód:
print_r($_DATABASE);

Vypíše mi:
Citácia:
SubSystem Object
(
[Skola] => stdClass Object
(
[0] => stdClass Object
(
[0] => 3
[ID] => 3
[1] => 1
[PID] => 1
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Zakladna-skola
[URL] => Zakladna-skola
)

[1] => stdClass Object
(
[0] => 4
[ID] => 4
[1] => 2
[PID] => 2
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Stredna-skola
[URL] => Stredna-skola
)

[2] => stdClass Object
(
[0] => 5
[ID] => 5
[1] => 3
[PID] => 3
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Vysoka-skola
[URL] => Vysoka-skola
)

)

)


Dám:
Kód:
print_r($_DATABASE -> Skola);

Vypíše mi:
Citácia:
stdClass Object
(
[0] => stdClass Object
(
[0] => 3
[ID] => 3
[1] => 1
[PID] => 1
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Zakladna-skola
[URL] => Zakladna-skola
)

[1] => stdClass Object
(
[0] => 4
[ID] => 4
[1] => 2
[PID] => 2
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Stredna-skola
[URL] => Stredna-skola
)

[2] => stdClass Object
(
[0] => 5
[ID] => 5
[1] => 3
[PID] => 3
[2] => 1
[ID_User] => 1
[3] => Vysoká škola
[Name] => Vysoká škola
[4] => 1
[Level] => 1
[5] => 2010-01-03 22:51:32
[Date] => 2010-01-03 22:51:32
[6] => Vysoka-skola
[URL] => Vysoka-skola
)

)


Nakoniec dám:
Kód:
print_r($_DATABASE -> Skola -> {'0'});

Nevypíše mi nič
Pre použijem miesto print_r var_dump:
Kód:
var_dump($_DATABASE -> Skola -> {'0'});

Vypíše mi
Citácia:
NULL


//edit:
Zapol som chybové hlásenia:
Citácia:
Notice: Undefined property: stdClass::$0


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 13:43 | Dynamické objekty

znamena to, ze $_DATABASE -> Skola -> {'0'} neexistuje (btw funguje to aj s {0})... co z toho vyplyva? pozri si poriadne vysledny objekt, na ktorom to testujes, lebo vypis, ktory si tu uviedol, to asi nebude... pretoze, ak pouzivas funkciu array2object, ktoru si sem postol, pre index 0 ti na riadku !empty($name) podmienku vyhodnoti ako false, a tak sa do vysledneho objektu nedostane... je preto logicke, ze ti vypisuje chybu Undefined property ;)


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 13:46 | Dynamické objekty

Používam tú tvoju upravenú funkciu, lebo je kratšia. Výpisi ktoré som sem dal, sú skutočné a pravdivé, vytváral som ich počas písania príspevku (teda som to testoval počas písania) aby neboli zavádzajúce. To čo som sem dal je skutočné, nechápem prečo to nejde :) (Lebo v objektoch sa nachádza)


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 14:00 | Dynamické objekty

hmm a ked pouzivas stdClass, volanie vlastnych metod ti funguje?


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 14:07 | Dynamické objekty

Ako to myslíš?


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 14:13 | Dynamické objekty

na zaciatku si chcel, aby si mohol volat vlastne metody pri kazdom objekte...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Dynamické objekty

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6
NapísalOffline : 04.01.2010 14:15 | Dynamické objekty

Tominator píše:
juho: Veľmi si mi znova nepomohol, to hore s tým konštruktorom nebolo také jednoduché. To druhé je zas príliš pracné :)
tam nemalo byt nic prve ani druhe to som si myslel ze som ti daval navod ze ako nato(nieco ako):
Kód:
<?php
class CL{

    function CL($x){
      foreach($x as $k=>$s){
       foreach($s as $l=>$m)
                $this->$k->$l=$m;
                        }
    }
 function vypis(){
   print_r($this);

 }
}

$a=array("a"=>array(1,2,3),"b"=>array(4,5,6));
$o=new CL($a);
$o->vypis();
echo "<br/> ";
echo $o->a->{"1"};

?>


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 14:37 | Dynamické objekty

stenley píše:
na zaciatku si chcel, aby si mohol volat vlastne metody pri kazdom objekte...

No takže mi to nefungovalo. Dal som preto späť tú funkciu čo som sem poslal. Teraz mi už fungujú metódy ale stále som sa nikam nepohol :)

Prikladam výpisi:
Kód:
print_r($_DATABASE -> Skola);

Citácia:
ChildClass Object
(
[1] => ChildClass Object
(
[id] => 4
[1] => 2
[pid] => 2
[2] => 1
[id_user] => 1
[3] => Stredná škola
[name] => Stredná škola
[4] => 1
[level] => 1
[5] => 2010-01-04 14:32:07
[date] => 2010-01-04 14:32:07
[6] => Stredna-skola
[url] => Stredna-skola
)

[2] => ChildClass Object
(
[id] => 5
[1] => 3
[pid] => 3
[2] => 1
[id_user] => 1
[3] => Vysoká škola
[name] => Vysoká škola
[4] => 1
[level] => 1
[5] => 2010-01-03 22:51:32
[date] => 2010-01-03 22:51:32
[6] => Vysoka-skola
[url] => Vysoka-skola
)

)


Metóda:
Kód:
function Child() {         
            return (is_object($this)) ?  get_object_vars($this): false;
        }

Kód:
print_r($_DATABASE -> Skola -> Child());

Citácia:
Array
(
[1] => ChildClass Object
(
[id] => 4
[1] => 2
[pid] => 2
[2] => 1
[id_user] => 1
[3] => Stredná škola
[name] => Stredná škola
[4] => 1
[level] => 1
[5] => 2010-01-04 14:32:07
[date] => 2010-01-04 14:32:07
[6] => Stredna-skola
[url] => Stredna-skola
)

[2] => ChildClass Object
(
[id] => 5
[1] => 3
[pid] => 3
[2] => 1
[id_user] => 1
[3] => Vysoká škola
[name] => Vysoká škola
[4] => 1
[level] => 1
[5] => 2010-01-03 22:51:32
[date] => 2010-01-03 22:51:32
[6] => Vysoka-skola
[url] => Vysoka-skola
)

)

Avšak:
Kód:
print_r($_DATABASE -> Skola -> {0});

Citácia:
Notice: Undefined property: ChildClass::$0

Kód:
print_r($_DATABASE -> Skola -> {'0'});

Citácia:
Notice: Undefined property: ChildClass::$0


------------------------------------------
//EDIT: Prikladám samotnú triedu:
Kód:
class ChildClass extends Database {}
class Database {
       
        function array2object($data) {
          if(!is_array($data)) return $data;
   
           $object = new ChildClass();
           if (is_array($data) && count($data) > 0) {
              foreach ($data as $name=>$value) {
                 $name = strtolower(trim($name));
                 if (!empty($name)) {
                    $object->$name = $this -> array2object($value);
                 }
              }
           }
           return $object;
     
        }

        function MakeObject($data, $name) {
            $this -> {$name} = $this -> array2object($data);
        }
       
        function Length() {
            return Count(get_object_vars($this));
        }
       
        function Child() {
           
            return (is_object($this)) ?  get_object_vars($this): false;
        }
           
}


Offline

Správca fóra
Správca fóra
Dynamické objekty

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 04.01.2010 14:51 | Dynamické objekty

uz som ti pisal, ze si mas poriadne pozriet ten vypis: 0 tam nemas, preto ti vypisuje, ze neexistuje...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3991
Témy: 96 | 96
Napísal autor témyOffline : 04.01.2010 15:37 | Dynamické objekty

trapas :D Už to funguje.


 [ Príspevkov: 26 ] 


Dynamické objekty



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Photoshop objekty

v Grafické programy

4

240

26.08.2011 10:59

nickairsoft

V tomto fóre nie sú ďalšie neprečítané témy.

PHP Objekty

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PHP, ASP

58

2791

03.05.2011 17:42

misko16

V tomto fóre nie sú ďalšie neprečítané témy.

ActiveX objekty

v Ostatné programy

5

581

12.12.2010 0:04

playmaker

V tomto fóre nie sú ďalšie neprečítané témy.

Objekty ako polia

v PHP, ASP

7

351

03.01.2010 12:49

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

objekty a polia v SESSION

v PHP, ASP

2

383

24.08.2009 10:15

tomast7

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicke pole..

v PHP, ASP

3

221

28.09.2011 22:56

Ando

V tomto fóre nie sú ďalšie neprečítané témy.

dynamicke obrazky

v HTML, XHTML, XML, CSS

11

500

09.02.2008 1:06

HAE07

V tomto fóre nie sú ďalšie neprečítané témy.

Router - dynamicke IP

v Siete

3

248

09.08.2011 13:19

michalesku

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicke programovanie - maximalizacia ceny

v Assembler, C, C++, Pascal, Java

2

246

25.06.2015 11:59

nBXXL

V tomto fóre nie sú ďalšie neprečítané témy.

dynamické menenie udalosti onclick

v JavaScript, VBScript, Ajax

5

548

13.06.2008 22:47

emer

V tomto fóre nie sú ďalšie neprečítané témy.

Delphi - Dynamické vykreslovanie (runtime) komponentov

v Delphi, Visual Basic

3

367

15.10.2010 10:05

coldak

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicke pole v Triede C++

v Assembler, C, C++, Pascal, Java

1

1776

19.11.2008 14:51

Dark_Raven

V tomto fóre nie sú ďalšie neprečítané témy.

DYNAMICKE vs. STATICKE pole smernikov !!!SUUURNE!!!

v Assembler, C, C++, Pascal, Java

6

1793

11.05.2009 8:48

sangokoko

V tomto fóre nie sú ďalšie neprečítané témy.

android ListView a jeho dynamicke nacitavanie

v Android, iOS, Windows Phone (Mobile)

10

285

05.05.2014 21:54

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamicke pole - problem s pridanim zatvoriek

v JavaScript, VBScript, Ajax

7

350

27.08.2011 15:08

chrono

V tomto fóre nie sú ďalšie neprečítané témy.

C++ a Dynamické pretypovanie funkcie z DLLky...

v Assembler, C, C++, Pascal, Java

4

528

07.08.2009 22:15

imrich



© 2005 - 2017 PCforum, edited by JanoF