PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
parameetri väärtuse omistamine extended klassis
Postitaja: kaka; 2013-03-29 23:42:11
tere, kas ja kuidas on võimalik määrata Riigid :: $nimetus ja Maakonnad :: $nimetus väärtus läbi Linnad instantsi (objLinn)


PHP kood:
 
class Riigid {
public 
$nimetus;
}

class 
Maakonnad extends Riigid {
public 
$nimetus;
}

class 
Linnad extends Maakonnad {
public 
$nimetus;
}

$objLinn = new Linnad;

// see toimib ilusasti
$objLinn -> nimetus 'Tallinn';


// või peab näiteks maakonna määramiseks tegema lisa meetodi

class Linnad extends Maakonnad {
public 
$nimetus;
public function 
omista_maakond ($nimetus '') {
parent :: $nimetus $nimetus// aga see tekitab valge lehe
}
}



// ma tean, et pannes kõik ühte muutujasse on see võimalik
class Riigid {
public 
$nimetused = array('riik' => '''maakond' => '''linn' => '');
}

class 
Maakonnad extends Riigid {

}

class 
Linnad extends Maakonnad {

}
$objLinn -> nimetused['linn'] = 'Tallinn';


// aga ehk on võimalik neid eraldi hoida??
RE: parameetri väärtuse omistamine extended klassis
Postitaja: Evelin Hilves 2013-03-30 01:30:30
semu, OO mudelleerimise vaates on vale kirjeldada "Maakonnad extends Riigid" jne. See on mingi jabur viis kirjeldada/nimetada valdkonnamudelit (domainmodel) objektide struktuurina.

Kui sa tahad miskit aadressi/ehak sarnast kirjeldada, siis loo just selline klass, mis omakorda sisaldab (composition) riik/linn/maakond objekte/välju.

Kui sa tahad luua mingit abstraktset alusklassi linn/maakond/riik tüüpi objektidele, siis see eraldi klassi ning sellest extendi.


igastahes on mõttekäik "linn laiendab maakonda, mis laiendab riiki" kummaline.

RE: parameetri väärtuse omistamine extended klassis
Postitaja: Evelin Hilves 2013-03-30 01:42:37
lisaks ... "Maakonnad extends Riigid" tähendab, et iga maakond on riigi alamklass. Kas see on loogiline?

Mõtisklemiseks pisut loogilisem klassistruktuur:
"class animal"
"class dog extends animal" (koer on loom)
"class rottveiler extend dog" ( rottveiler on koer, rottveiler on loom)

muidugi tuleks siin lisaks tuua sisse mõisted liides (interface) aga sellega ma su pead vaevama ei hakka.
RE: parameetri väärtuse omistamine extended klassis
Postitaja: gaal_ 2013-03-30 10:06:54
Kõik on võimalik, aga tõesti, mida sa üldse luua tahad.
Tõenäoliselt reflection on selline vahend, mida siin saab kasutada, aga OO mudel võib ka hoopis teistsugune tulla, sõltuvalt ülesandest.
http://php.net/manual/en/book.reflection.php
RE: parameetri väärtuse omistamine extended klassis
Postitaja: Duracell . 2013-03-30 12:30:02
TSITEERITUD:
Kõik on võimalik, aga tõesti, mida sa üldse luua tahad.
Tõenäoliselt reflection on selline vahend, mida siin saab kasutada, aga OO mudel võib ka hoopis teistsugune tulla, sõltuvalt ülesandest.
http://php.net/manual/en/book.reflection.php


ma näiteks tahan registreerida uut linna, iga linn kuulub ühte maakonda ja ühte riiki

ma eelistaks meetodit linna klassis, mis lisab linna ja käivitab meetodi maakonna klassis maakonna lisamiseks ja sarnaselt on maakonna klassis meetod lisamiseks, mis lisab vaid maakonna ja käivitab meetodi riigid klassis riigi lisamiseks

samas, et mul oleks võimalik erineval tasandil lisada infot (linn, maakond riik), näiteks ainult riigi lisamine

siin selgituses "lisamine" on vaid näitlik, see võib olla ka detailid vms


tänud
RE: parameetri väärtuse omistamine extended klassis
Postitaja: blaa 2013-03-30 17:54:53
kuigi Edgar seda arvab või soovib, siis Tallinn ei ole ikkagi Eesti.
Aga Tallinn võib olla/on omavalitsus. Seega võib mõelda näiteks, et class Linn extends Omavalisus.
RE: parameetri väärtuse omistamine extended klassis
Postitaja: lost in scope 2013-04-01 11:08:11

PHP kood:
 
class Linnad extends Maakonnad 
public static 
$nimetus
public function 
omista_maakond ($nimetus '') { 
self::$nimetus $nimetus// aga see tekitab valge lehe - really?



http://php.net/manual/en/language.oop5.static.php
sa teed julmalt override - Linnad nimetus overrides Maakonnad nimetus etc. lisaks sa miksid static ja tavalist oopi - ei loe välja kuidas sa objekti tekitad.
kompositsiooni ja agregatsiooni kohta - http://en.wikipedia.org/wiki/Object_composition

ma ei leia, et see extendimine teatud olukorras väga vale oleks, kui mõelda andmebaasile ja seosele aadress tabel omab seost mitu ühele maakond primary keyga ja tabel maakond omakorda omab seost mitu ühele riigi primary keyga. aga elegantsemalt saab kindlasti küll jah - nagu eespool mainiti.
RE: parameetri väärtuse omistamine extended klassis
Postitaja: targutaja 2013-04-02 14:03:33
Kui sul on vaja mingit omavalitsuste-spetsiifilist andmestiku lahata, siis oleks mõistlik leida neis kõigis ühisosa ja kirjutada abstraktne klass (abstract class Omavalitsus {}). Iga omavalitsus on piisavalt erinev, et vaevalt et neid saab küla->alev->linn stiilis laiendada. Mingi ühsiosa neil kindlasti on - inimesed sees ja mingi haldusüksus tegemas otsuseid, pindala jms. Nii mõnigi tegevus on sootuks eripalgeline ja abstraktsed meetodid leiavad siin oma koha. Interface'i rakendamine antud situatsioonis ilmselt ei kõlba, sest objekti tüüpi saab sellisel juhul defineerida vaid kas Interface'i või class'i põhiselt. Sul on aga vaja, et objekt vastaks mõlema nõuetele. Iga allüksus peab olema antud abstraktse klassi sõsar. Kui olukord võimaldab, siis mõni neist võib, aga ei pea olema (lisanduvalt) omavalitsuselt allüksuseks laiendatud, pigem ikka algse abstraktse klassi otsene laiendus.
Kui sul on vaja lihtsalt andmebaasi struktuuri jäljendada, siis tuleks kirjutada üks klass, mille iga instanss saab tema loome hetkel korrektse type_id ja on lisatav vaid korrektse omavalitsuse allüksusele. See oleks Mapper-mustri jäljendus. Andmebaasiga vahetuks suhtlemiseks olgu eraldi klass. Meenutagem Maatrixi Keymaster'it, kes teadis täpselt nõnda palju kui tal oli vaja teada.
Iga struktuuri eraldi laiendamine tähendab, et progeja on saanud aru OOP süntaksist, aga mitte põhimõttest. Sisuliselt on see arusaamine võrreldav viie muutuja tõstmisega massiivi. See tagab viie globaalse sümboli asemel uhe ainukese, mis on hea. Ja nii tulekski võimalusel käituda. OOP aga on midagi enamat, kui sarnase andmestiku ja temaga seonduva funktsionaalsuse koondamine objekti. See oleks struct mitte class.
RE: parameetri väärtuse omistamine extended klassis
Postitaja: Lost in scope 2013-04-02 21:14:37
TSITEERITUD:
Kui sul on vaja mingit omavalitsuste-spetsiifilist andmestiku lahata, siis oleks mõistlik leida neis kõigis ühisosa ja kirjutada abstraktne klass (abstract class Omavalitsus {}). Iga omavalitsus on piisavalt erinev, et vaevalt et neid saab küla->alev->linn stiilis laiendada. Mingi ühsiosa neil kindlasti on - inimesed sees ja mingi haldusüksus tegemas otsuseid, pindala jms. Nii mõnigi tegevus on sootuks eripalgeline ja abstraktsed meetodid leiavad siin oma koha. Interface'i rakendamine antud situatsioonis ilmselt ei kõlba, sest objekti tüüpi saab sellisel juhul defineerida vaid kas Interface'i või class'i põhiselt. Sul on aga vaja, et objekt vastaks mõlema nõuetele. Iga allüksus peab olema antud abstraktse klassi sõsar. Kui olukord võimaldab, siis mõni neist võib, aga ei pea olema (lisanduvalt) omavalitsuselt allüksuseks laiendatud, pigem ikka algse abstraktse klassi otsene laiendus.
Kui sul on vaja lihtsalt andmebaasi struktuuri jäljendada, siis tuleks kirjutada üks klass, mille iga instanss saab tema loome hetkel korrektse type_id ja on lisatav vaid korrektse omavalitsuse allüksusele. See oleks Mapper-mustri jäljendus. Andmebaasiga vahetuks suhtlemiseks olgu eraldi klass. Meenutagem Maatrixi Keymaster'it, kes teadis täpselt nõnda palju kui tal oli vaja teada.
Iga struktuuri eraldi laiendamine tähendab, et progeja on saanud aru OOP süntaksist, aga mitte põhimõttest. Sisuliselt on see arusaamine võrreldav viie muutuja tõstmisega massiivi. See tagab viie globaalse sümboli asemel uhe ainukese, mis on hea. Ja nii tulekski võimalusel käituda. OOP aga on midagi enamat, kui sarnase andmestiku ja temaga seonduva funktsionaalsuse koondamine objekti. See oleks struct mitte class.

Pluss yks. V6imas.
RE: parameetri väärtuse omistamine extended klassis
Postitaja: Otsin endale Bob'i 2013-04-02 21:46:02
TSITEERITUD:

Pluss yks. V6imas.


agree.... mingil üliheal arendajal on aega tekkinud. Bob? :)

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0814599990845