Autor Zpráva
zacatecnik_s_php
Profil *
Ahoj chci se zeptat k cemu jsou tridy v OOP. Respektive jak je spravne vyuzit. Uvedu priklad

class Osoba {

private $jmeno;

function  __construct($jmeno)

{ $this->jmeno = $jmeno; }

function nastavJmeno ($jmeno)

{ $this->jmeno = $jmeno; }

function ukazJmeno ()

{ return $this->jmeno; }


};

... php kod class.php

$lenka = new osoba ("lenka");
print $lenka->ukazJmeno();


proč by nestačilo napsat např.

$jmeno = "lenka"; 


A kam odkazuje $this na ten konstruktor nebo na to $jmeno?

Díky za odpověď
Timy
Profil
zacatecnik_s_php
Zkus si přečíst některé z témat pojednávající o výhodách OOP.
zacatecnik_s_php
Profil *
to jsem zkousel a prave z toho mi nic neni jasne :((((((( Poradíš více?
DoubleThink
Profil *
ROOT.CZ: Seriál PHP v objetí objektů
zacatecnik_s_php
Profil *
dekuji, mrknu na to
blizz_boz
Profil
zacatecnik_s_php

tá trieda je v tomto prípade úplne zbytočná. keď sme už pritom v bežných objektových jazykoch by napr tento zápis:

string jmeno = "lenka";


vytvoril inštanciu triedy string. avšak php neni plnohodnotný objektový jazyk.
fuckin
Profil
blizz_boz
Neni, ale od php5 doznal mnoha vylepseni. V OOP delam jiz rok a musim rict ze at uz php nebo jiny jazyk, vyjde to nastejno, princip je stejny.


Ta metoda nastavJmeno je tam dosti zbytecna.
$this odkazuje na aktualni tridu.

$jmeno = 'lenka'; lze avsak neni to objektove. Dalo by se rict ze to je jen takova lokalni promenna v dane metode, nevztahuje se k dane tride.
Timy
Profil
fuckin
Ta metoda nastavJmeno je tam dosti zbytecna.
Proč?

$this odkazuje na aktualni tridu.
Spíše na aktuální objekt/instanci, třída je vždy jen jedna, je to jen jakýsi předpis.
fuckin
Profil
Timy
Proc? No protoze dela to same co konstruktor. A neni ani aktivovana, proste je tam zbytecne.

S tim $this mas samozrejme pravdu, nevedel jsem jak to napsat aby to autor pochopil.
Timy
Profil
fuckin
Proc? No protoze dela to same co konstruktor. A neni ani aktivovana, proste je tam zbytecne.
To nevadí, že dělá totéž co konstruktor. Co když budu chtít v průběhu života objektu změnit hodnotu jména?
Alphard
Profil
To nevadí, že dělá totéž co konstruktor.
Tak to bych v konstruktoru volal metodu nastavJmeno (nebo setJmeno). Je vhodné myslet na to, že časem můžeme chtít přidat validační pravidla (a ty AFAIK patří právě do nastavJmeno).
Timy
Profil
Alphard
To je pravda.
blizz_boz
Profil
fuckin

$jmeno = 'lenka'; lze avsak neni to objektove. Dalo by se rict ze to je jen takova lokalni promenna v dane metode, nevztahuje se k dane tride.

nj ale v čisto objektovom jazyku by bol $jmeno objekt typu string, bohužiaľ PHP neni plnohodnotný objektový jazyk.


Neni, ale od php5 doznal mnoha vylepseni.

hej ale PHP má od objektového jazyka ešte stále ďaleko, kombinovať dva štýly programovania (objektový a procedurálny) neni imho najlepší nápad.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: