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
Kuidas läheneda õigesti (OOP)
Postitaja: Algaja OOPija 2006-08-28 16:55:04
Mida teha, et alljärgnev kood vastaks OOP põhitõdedele.

Pildiga uudise kustutamine:

PHP kood:
 
// kustutamine.class.php
class Kustutamine
{
    var 
$tabel;
    var 
$id_atr;
    var 
$kataloog;
    var 
$thumbs;
    var 
$pilt_atr;
    var 
$id;
    
    
/**
    * Muutujate väärtustamine
    *
    * @param  string  $tabel     MySQL-tabeli nimi
    * @param  int     $id_atr    ID atribuudi nimi MySQL-tabelis
    * @param  string  $kataloog  Kataloog, kus asuvad suured pildid
    * @param  string  $thumbs    Kataloog, kus asuvad pisipildid
    * @param  string  $pilt_atr  Pildi nime atribuudi nimi (MySQL)
    * @param  int     $id        Kustutatava kirje ID
    */
    
function setVars($tabel$id_atr$kataloog$thumbs$pilt_atr$id)
    {
        
$this->tabel        = (string) $tabel;
    
$this->id_atr       = (int)    $id_atr;
    
$this->kataloog     = (string) $kataloog;
    
$this->thumbs       = (string) $thumbs;
    
$this->pilt_atr     = (string) $pilt_atr;
    }
    
    
    
/**
    * Pildi nime leidmine kustutamiseks
    *
    * @return  string       Kustutatava pildi nimi
    */
    
function getPildiNimi()
    {
    
$korras mysql_query('SELECT ' $this->pilt_atr 
                           FROM   ' 
$this->tabel    '
                           WHERE  ' 
$this->id_atr   ' = ' . (int) $this->id 
                           LIMIT 1'

        or die(
'Pildi nime leidmine ebaõnnestus ' mysql_fetch_array());
    
        
$rida mysql_fetch_array($korras);
        
        return 
htmlspecialchars(stripslashes$rida[$this->pilt_atr] ));
    }

    
    
/**
    * Pildi kustutamine
    */
    
function kustutaPilt()
    {
        
$pilt $this->getPildiNimi();
        
        if (!empty(
$pilt))
        {
            
// Suure pildi kustutamine
            
if (file_exists($this->kataloog $pilt))
            {
                
unlink($this->kataloog $pilt);
            }
            
            
// Pisipildi kustutamine
            
if (file_exists($this->thumbs $pilt))
            {
                
unlink($this->thumbs $pilt);
            }
        }        
    }
    
    
/**
    * Kirje kustutamine andmetabelist
    */
    
function eemaldaUudis()
    {
        
$korras mysql_query('DELETE FROM ' $this->tabel 
                               WHERE       ' 
$this->id_atr ' = ' . (int) $this->id 
                               LIMIT 1
                              '

        or die(
'Andmebaasist eemaldamine ebaõnnestus ' mysql_error());    
    }
    
    
/**
    * Kustutab nii pildid kui uudise
    */
    
function eemaldaKoik()
    {
        
$this->kustutaPilt();
        
        
$this->eemaldaUudis();
    }
}

Kasutamine

PHP kood:
 
// index.php
switch ($action)
{
    case 
'kustuta':
        if (isset(
$_GET['id']))
        {
            include_once(
'kustutamine.class.php');
            
$kustuta = new Kustutamine;
            
            
$kustuta->setVars('proov_uudised''u_id''../uudised/''../uudised/thumbs/''u_pilt'$_GET['id']);

            
$kustuta->eemaldaKoik();
        }
    break;
    
    
// ...
}
RE: Kuidas läheneda õigesti (OOP)
Postitaja: Keegi_Teine 2006-08-28 17:01:04
tegevus ei ole objekt, tegevus on objekti meetod. Mõtle selle peale.
RE: Kuidas läheneda õigesti (OOP)
Postitaja: :> 2006-08-28 17:19:43
Aga kood näeb küll vägagi esteetiline välja!
RE: Kuidas läheneda õigesti (OOP)
Postitaja: MeiX 2006-08-28 19:38:01
Vali ülevalt servast "otsi" ja kirjuta sõnaks oop vms. OOP algtõdesid on kõvasti siin nämmutatud juba (vähemalt minu poolt 3-4x).
RE: Kuidas läheneda õigesti (OOP)
Postitaja: monte_ 2006-08-28 20:38:43
kasuta jah otsingut, neid asju siin nõrkemiseni nämmutatud. Veel parem osta mõni raamat.

algatuseks sobib kasvõi "thinking in java", mis tasuta allalaetav. seal on OOP sissejuhatus päris korralik. Lase googlest läbi, vea alla ja mõtiskle natuke selle üle.

põhiline viga, mis tehakse ongi et võetakse klassi kontruktsioon ja kasutatakse seda lihtsat koodikonteinerina. OOP on SISULINE kontseptsioon.
RE: Kuidas läheneda õigesti (OOP)
Postitaja: raigu 2006-08-28 22:56:00
Klass peab enamasti olema ikkagi mingi (reaalne) objekt (Pilt, Uudis jne) mitte tegevus (Kustuta).

Vaadates näidet arvan, et ehk võib abiks tulla uurida selliseid mustreid nagu Command Patternit

http://www.phppatterns.com/docs/design/the_command_pattern?s

või siis Front Controller-it

http://www.phppatterns.com/docs/design/the_front_controller_

RE: Kuidas läheneda õigesti (OOP)
Postitaja: Algaja OOPija 2006-08-29 00:38:33
Tänud vastajatele - homme katsun nendesse materjalidesse süveneda.

Keegi oskajatest, võiks välja tuua failide nimekirja ning klasside-meetodite nimed, millest võiks koosneda nn true OOP uudistesüsteem.

Usun, et sellest oleks õppimise juures tohutult kasu.
RE: Kuidas läheneda õigesti (OOP)
Postitaja: _scorps 2006-08-29 08:12:38
TSITEERITUD:
Klass peab enamasti olema ikkagi mingi (reaalne) objekt (Pilt, Uudis jne) mitte tegevus (Kustuta).

Objekt võib olla ka tegija. näiteks uudiste otsija vms...
RE: Kuidas läheneda õigesti (OOP)
Postitaja: aksel 2006-08-29 10:40:54
TSITEERITUD:
Tänud vastajatele - homme katsun nendesse materjalidesse süveneda.

Keegi oskajatest, võiks välja tuua failide nimekirja ning klasside-meetodite nimed, millest võiks koosneda nn true OOP uudistesüsteem.

Usun, et sellest oleks õppimise juures tohutult kasu.


klassid:
News (see on siis üks uudis)
väljad:
id
heading
lead
body
validFrom
validTo

jne...

NewsCollection (hoiab mitut uudist)
ise tead, kuidas selle implementeerid. põhimõtteliselt võiks olla array tüüpi väli "items", kus siis hoiad News-tüüpi asju.

Ja lisaks peaks sul siis olema ka mingi MVC-tüüpi raamvärk nende uudiste näitamiseks ning samuti mingi kiht, mis andmebaasiga suhtleb.
RE: Kuidas läheneda õigesti (OOP)
Postitaja: aksel 2006-08-29 10:41:57
TSITEERITUD:

Keegi oskajatest, võiks välja tuua failide nimekirja ning klasside-meetodite nimed, millest võiks koosneda nn true OOP uudistesüsteem.


Aa, seda veel, et hea tava kohaselt klassi nimi==faili nimi ja arusaadavalt on 1 klass per fail.

RE: Kuidas läheneda õigesti (OOP)
Postitaja: rtfm 2006-08-29 10:45:17
TSITEERITUD:
Tänud vastajatele - homme katsun nendesse materjalidesse süveneda.

Keegi oskajatest, võiks välja tuua failide nimekirja ning klasside-meetodite nimed, millest võiks koosneda nn true OOP uudistesüsteem.

Usun, et sellest oleks õppimise juures tohutult kasu.


proovi cakephp frameworki ja loe seal manual läbi, kui katsete varal tahad õppida, võid ka uurida mis seal kõhus toimub
RE: Kuidas läheneda õigesti (OOP)
Postitaja: Endel 2006-09-02 14:22:20
Paar asja:

* kasuta kas ühte või teist keelt - praegu on sul nimedes inglise ja eesti keel läbisegi, jube narr on sellist koodi jälgida

* praegu kui sa tahad muuta mõnda muutujat (setVars) pead sa kõik teised ka uuesti kaasa andma. Selline oleks vähe parem: setVar($var_name, $var_value) ja klassi muutuja $vars vms :P

* klassi nimi peaks olema mitte tegevus (Kustuta) vaid objekt (ntx Uudis), seal meetodid kustuta jne
RE: Kuidas läheneda õigesti (OOP)
Postitaja: ninnunännu 2006-09-02 15:00:06
Meetod setVars on antud kontekstis liigne. Sest klassi initsialiseerimisel on seda niiguist nii vaja teha. Siis oleks juba seda mõistlik kohe konstruktoriga teha. Ok, jätame PHP5 momendiks, teeme nigust on PHP4.


PHP kood:
 
class Kustutamine
{
   var .... 
   function 
Kustutamine($parm1$parm2 ..)
   {
      
$this->Parm1 $parm1;


jne

Ja muidugi pole Kustutamine objekt, vaid tegevus, seega pigem meetod.
RE: Kuidas läheneda õigesti (OOP)
Postitaja: ray 2007-06-23 15:20:47
Kustutamine võib vabalt olla klass/objekt (oleneb täiesti sellest kuidas sa oma rakenduse üles ehitad). Uuri Command Patternit näiteks.



PHP kood:
 
DeleteAllAction 
extends Action {
    function 
execute() {
         
    }
}


Leheküljed: 1

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