Stránka 1 z 2

[PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 12:27
od -b3h-
Zdravim Vas,

sice v PHP programuji nejaky ten rok, ale clovek se musi ucit novym vecem, tak jsem se zameril na OOP, ktere jsem do ted nejak zvlaste nedelal. Dnes pri zkouseni, jsem narazil na jeden:

Kód: Vybrat vše
<?php

class trida1 {

  public $promenna = 10;

  function __construct() {
    new trida2;
  }

}

class trida2 {

  function __construct() {
    print $this->promenna;
  }

}

new trida1;

?>


Proste a jednoduse, chci aby mi trida2 vypsala hodnotu vlastnosti $promenna tridy1, jak to udelam? zkousim vsechno mozne ale nejak bez uspechu. Asi by mozna byla alternativa predat pri vytvareni instance parametr s prave touto promennou, ale teto moznosti bych se chtel vyvarovat, je to tedy nejak jinak mozne vyresit?

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 12:52
od Wikan
Bez toho, aby ses na objekt nejak odkazal, to nepujde.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 13:21
od -b3h-
Wikan píše:Bez toho, aby ses na objekt nejak odkazal, to nepujde.


Dobre, co tedy navrhujes?

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 13:25
od Wikan
Bud to predat jako parametr, nebo mit v tride2 public property typu trida1.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 13:39
od -b3h-
Wikan píše:Bud to predat jako parametr, nebo mit v tride2 public property typu trida1.


Mohl by jsi blize rozvest tu druhou moznost?

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 16:57
od Wikan
Co na tom chces rozvest?

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 20:20
od gandor
takze 1,
to "this" znamena ze sa odkazujes na premennu v danom objekte (t.j. ked v triede 2 nemas definovanu $promenna tak $this->promenna by vobec nemal fungovat).
2,
ak narabas s 2 triedami tak by bolo vhodne obidve vytvorit (inac je to ako chciet sa odkazovat na definiciu funkcie beztoho aby si tu danu funkciu "otvoril" (pouzil) )
Kód: Vybrat vše
$t1=new trieda1();
$t2=new trieda2();

3, ak chces ziskat hodnotu premennej z triedy 1 (a mas ju vytvorenu a v oboch je definovana dana premenna) a vlozit ju do triedy 2 tak to robis nejak takto:
Kód: Vybrat vše
$t2->premenna=$t1->promenna;


dufam ze som niekde nespravil preklep lebo som to netestoval... :)

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 20:30
od Nargon
Mno, a nebo tridu2 vytvorit dedenim od tridy1.
Tj asi neco takoveho to:
Kód: Vybrat vše
<?php
class trida1 {
  public $promenna = 10;
  function __construct() {
  }
}
class trida2 : trida1 {
  function __construct() {
    print $this->promenna;
  }
}
new trida2;
?>

Ale v PHP jsem celkove delal trosku. A OOP jsem v nem nedelal vubec, tak si nejsem jistej, jestli ten zapis je dobre.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 20:44
od gandor
nuz napisal si to zle (teda minimalne to ma 2 zapisi a ten tvoj som este nikdy nevidel)
ked inheritujes tak zapis je takyto:
class trida2 extends trida1
v danom pripade by mala trieda 2 obsahovat vsetko co trieda 1 (pozor ale na prava, nepamatam si ako je to s premennymi deklarovanymi ako privat a pod....)

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 21:18
od wojta
private - nemá přístup nic, kromě té dané třídy, ani potomci
protected - mají přístup potomci
public - má přímo přístup zvenčí, což se nějak u proměnných nedoporučuje, spíš použít nějakou formu getterů/setterů

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 21:50
od -b3h-
gandor píše:takze 1,
to "this" znamena ze sa odkazujes na premennu v danom objekte (t.j. ked v triede 2 nemas definovanu $promenna tak $this->promenna by vobec nemal fungovat).
2,
ak narabas s 2 triedami tak by bolo vhodne obidve vytvorit (inac je to ako chciet sa odkazovat na definiciu funkcie beztoho aby si tu danu funkciu "otvoril" (pouzil) )
Kód: Vybrat vše
$t1=new trieda1();
$t2=new trieda2();

3, ak chces ziskat hodnotu premennej z triedy 1 (a mas ju vytvorenu a v oboch je definovana dana premenna) a vlozit ju do triedy 2 tak to robis nejak takto:
Kód: Vybrat vše
$t2->premenna=$t1->promenna;


dufam ze som niekde nespravil preklep lebo som to netestoval... :)


Diky, to me nenapadlo, neni to spatny napad ;-)

Abych pravdu priznal, nejak nemuzu OOP v PHP prijit na chut, do ted jsem vse programoval pomoci funkci v jednom souboru a ty jsem spolu nejak provazal a volal. Ale kdybych to chtel predelat do OOP tak mi to prijde ze bych tim mohl vytvorit tak max. jednu tridu, coz mi zase prijde zbytecne.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 22:13
od ondrad
OOP je potreba prijit na chut. Pocitej s tim, ze ze zacatku budes vytvaret priserne bastly. Ale jak se do toho dostanes a pochopis co a jak, tak uz nebudes chtit zpet.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 22:13
od gofry
ad pôvodný príspevok: Doporučujem prečítať si nejakú teóriu o objektovom programovaní a k čomu je to vôbec dobré. Mám totiž pocit, že stále rozmýšľaš o programovaní procedurálnym štýlom (vychádzam z tvojho kódu). Bez teórie nikdy nevyužiješ silu OOP, pretože OOP nie je o zápise kódu, ale o úplne inom spôsobe rozmýšľania o programovaní.

Celkom dobre vyzerá seriál na interval.cz: Objektově orientované programování (OOP) v PHP.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 22:28
od ondrad
Jo, kdyz si to ted znova ctu, tak gofry asi uhodil hrebicek presne na hlavicku. Zrejme uplne nechapes co a proc je cilem OOP a co jsou to vlastne objekty a jak se s nimi pracuje a snazis se na to naroubovat proceduralni pristup. Takze taky doporucuju nejdriv poradne nastudovat teorii.

Re: [PHP] OOP - predani hodnoty vlastnosti podrizene tride

Odeslat příspěvekNapsal: 6. 9. 2008 22:48
od -b3h-
gofry píše:ad pôvodný príspevok: Doporučujem prečítať si nejakú teóriu o objektovom programovaní a k čomu je to vôbec dobré. Mám totiž pocit, že stále rozmýšľaš o programovaní procedurálnym štýlom (vychádzam z tvojho kódu). Bez teórie nikdy nevyužiješ silu OOP, pretože OOP nie je o zápise kódu, ale o úplne inom spôsobe rozmýšľania o programovaní.

Celkom dobre vyzerá seriál na interval.cz: Objektově orientované programování (OOP) v PHP.


Presne tak, jsem zvykly programovat proceduralne, ale chcel bych nejaky zpusobem preucit na OOP. Mam koupenou knihu Mistrovstvi v PHP 5 a tam mam i prectenou kapitolu o OOP, ale nejak i presto vsechno mi to nejak nejde na rozum protak ci ona, proceduralne mi to prijde jednodussi. Ale mrknu na ten link co jsi sem dal.