PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

Foorumid Programmeerimine PHP & MySQL class'id

Kokku on 17 postitust, jaotatud 2 leheküljele: 1-2. Praegu näidatakse postitused 1-15.

Autor Abi Postitus Abi

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
class'id

Tekkis selline küsimus: tooge välja palun klasside kasutamise eelised klasside mitte kasutamise ees. Olen juba pikemat aega sellele mõelnud, ja pole välja mõelnud. Olen lugenud erinevaid artikleid, juhendeid jne. Aga tahaks kuulda nüüd teie arvamust. Ja tuua näiteid (kus võiks klasse kasutada jne).

20.01.2005 15:48:37 Vajutades siia näed kasutaja powerpuff profiili

uugu21

Postitusi: 380
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: class'id

Vat see küsimus sobiks õpetuste ja manualide soovide foorumisse...
Päris ühest vastust sellele ilmselt ei saa anda. Klassid on olulised peamiselt programmeerija poolt vaadatuna (s.t. neid ei kasutada mingi kiiruse või ressursi tõstmiseks/vabastamiseks). Klassi saad koguda kõik ühe objektiga seotud 'asjad' - funktsioonid ja muutujad. Hiljem pole sul vaja neid mööda koodi taga otsida. Lisaks veel koodi korduvkasutus...
Aga jah, see on pikk teema - äkki mõni 'vanakestest' viitsib selleteemalise artikli kirjutada. Tundub, et üha enam noobe hakkab algtasemelt kaugemale jõudma.

20.01.2005 16:31:02 Vajutades siia näed kasutaja uugu21 profiili

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
RE: class'id

Ei pea just noobiks ennast, kui tunnistan, et siiani pole lihtsalt class'e kasutanud. Õigemini pole näinud põhjust.
Et tahakski just täpsemaid näiteid ja soovitusi, et miks ikka klass jne. Keegi väitis, et korduste vältimiseks koodus teha klasse - samahästi saab teha ju ka funktsioone, ja vastavalt vajadusele neid muuta (sest klassides on ka klassisiseseid funktsioone - koodi ikkust see eriti ei muuda). Aga see on muidugi minu arvamus.

Iseenesest on klasside kasutamise õpetus olemas, kuid see ei andnud mulle piisavat vastust.

Ootan vastukaja.

20.01.2005 16:38:55 Vajutades siia näed kasutaja powerpuff profiili

mrq


Postitusi: 338
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10
RE: class'id

Tegin kiiruga ühe näite. Tooks kohe mitu aga piirdun hetkel ühega.

Kõigile tuntud login

Ühesõnaga minu klassi mõte on selles, et üks klass "kernel" tegeleks andmete kuvamisega. Ta otsib väljakutsutava klassi järgi talle template faili.
Ja ülejäänud klassid kasutavad teda kui extended klass. Need ülejäänud klassid siis tegelevad kõige sellega, mis neile on ette nähtud ehk siis login klass kontrollib sisestust!

Oki aga nüüd, et miks see on parem, kui lihtsalt koodi ülalt alla kirjutada?
1. Süstematiseeritus ning loetavus
2. Muutujad on paremini kaitstud ja saan seega kasutada klasse kus tahan ilma, et süsteem valesti tööle hakkaks, sest kuskil võivad muutujad kattuda või mis iganes. (PHP4 muidugi ei ole sellegi poolest kõige parem)
3. Uuesti kasutamine erinevates olukordades
4. Vea või veaparanduse korral piisab ühes kohas muudatuse tegemisest
5. Saad panna klasse tegema asju nii nagu sina soovid nt. mysql insert korral tagastatakse ka lisatud ID väärtus
6. Saad teha koopia antud klassist aga erinevate parameetritega samal ajal. Ma ei kujutagi ette kuidas seda ilma klassideta teha?! nt.
PHP kood:


// seame erinevad muutujad mida url realt lugeda
$dirman = new dirman('d','l','o','s');
// seame menüü
$dirman->set_menu();
// võtame andmed $_GET masiivist
$dirman->variables($_GET);

$dirman2 = new dirman('d2','l2','o2','s2');
$dirman2->variables($_GET);
echp  $dirman->draw().$dirman2->draw();


ja nüüd siis promo minu kernel ja login. rohkem ei viitsi seletada :P
PHP kood:


<?php
session_start
();
class 
kernel {
    var 
$source;
    var 
$vars;
    var 
$errors;
    var 
$TemplateDir;
    function 
kernel()
    {
    } 
    function 
setVar($key$value)
    {
        
$this->vars[$key] = $value;
    } 
    function 
setError($key$error)
    {
        
$this->errors[$key] = $error;
    } 
    
/**
     * Templite kataloog
     */
    
function setTemplateDir($dir '_template/')
    {
        
$this->TemplateDir $dir;
    } 
    function 
getTemplateDir()
    {
        return 
$this->TemplateDir;
    } 
    function 
render()
    { 
        
// siin näiteks parseldab template faili vastavalt selle järgi,
        // mis klass on välja kutsutud
        
$file $this->TemplateDir get_class($this) . '.tpl.html';
        if (!
is_readable($file)) exit("File not readable: $file"); 
        
// katsub kätte saada faili sisu
        
$this->source file_get_contents($file) or exit("Could not get file contents $file"); 
        
// renderdab source
        
return $this->parse_template($this->source$this->vars$this->errors);
    } 
    function 
parse_template($source$vars ''$errors '')
    { 
        
// kontrollime, kas $vars argument on ikka array
        
if (is_array($vars)) {
            
// tsükkel üle $vars kõigi elementide
            
foreach($vars as $key => $value) {
                
// moodustame tagi nime. Kui $key väärtuseks on näiteks "name",
                // siis tagi nimeks saab "{VAR:name}"
                
$tag "{var:" $key "}"
                
// asendame tagi tema väärtusega
                
$source str_replace($tag$value$source);
            } 
        } 
        if (
is_array($errors)) {
            foreach(
$errors as $key => $value) {
                
$tag "{error:" $key "}";
                
$source str_replace($tag$value$source);
            } 
        } 
        
$search array("/{var<img src="http://phpcenter.eu/img/smilied/kurb.gif" border="0">.*)}/U", "/{error<img src="http://phpcenter.eu/img/smilied/kurb.gif" border="0">.*)}/U");
        
$replace array("""");
        
$source preg_replace($search$replace$source); 
        
// tagastame $source, kus tagid on nüüd juba nende väärtustega asendatud
        
return $source;
    } 

class 
login extends kernel {
    var 
$user;
    var 
$password;
    function 
login()
    {
        
// seab kernel klassile template kataloogi asukoha
        
$this->setTemplateDir('_templid/dirman/'); 
        
// actions
        
if (isset($_GET['logout']))
            
$this->logout();
        
// check it
        
if (!isset($_SESSION['in'])) {
            if (isset(
$_POST['submit'])) {
                if (
$_POST['user'] == 'kasutaja' AND $_POST['password'] == 'parool') {
                    
$_SESSION['in'] = 1;
                    
// saime sisse 
                    // nüüd vii mind siit tingimusest välja uuendades lehekülge
                    
header("Location:http://" .$_SERVER['SERVER_NAME']. $_SERVER['PHP_SELF']);
                } else {
                    
// oli viga nüüd sea kernelile viga
                    // oletades, et login lehel on muutuja {error:login}
                    
$this->setError('login''Kasutaja ja parool olid valed');
                    
// renderda template
                    
$this->init();
                } 
            } else {
                
// renderda template
                
$this->init();
            }
            
// pole sees tähendab siit edasi ei lähe
            
exit; 
        }else{
            
// siin ei pea midagi olema, tegelt tähenda see seda, et jätkame tegevust
            // pange tähele, et peale sisse logimist ei teeks kusagilt return, sest see katkestaks töö
            
echo"Turva&nbsp;";
            echo
'<a href="?logout">Logout</a>';
        } 
    } 
    function 
logout()
    {
        unset(
$_SESSION['in']);
        
header("Location:http://" .$_SERVER['SERVER_NAME']. $_SERVER['PHP_SELF']);
    } 
    
// tagastame renderduse
    
function init()
    {
        echo 
$this->render();
    } 
}  
new 
login();


Näite panin: http://www.zone.ee/fated/dirman/index.php lehele, sealt saab ka template faili kätte!
http://www.zone.ee/fated/dirman/login.tpl.html

Seda postitust on muudetud 1 kord (2005-01-20 17:33:16 mrq poolt)

___________________________________________________
\"A bus station is where a bus stops. A train station is where a train stops.
On my desk, I have a workstation...\"
Anomaaliad toimuvad Area 51

20.01.2005 17:20:20 Vajutades siia näed kasutaja mrq profiili

uugu21

Postitusi: 380
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: class'id

hmh.. ma just mõtlesin, et mingi pika ja keerulise struktuuriga klassi pole mõtet siia pritsida - asjast abi üsna vähe. Kui keegi korralikumat seletust (või isegi artiklit/õpetust) asjast ei kirjuta siis ma nädalavahetusel (ehk) nokitsen midagi valmis.

20.01.2005 18:00:08 Vajutades siia näed kasutaja uugu21 profiili

mrq


Postitusi: 338
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10
RE: class'id

Tsiteeritud tekst:
hmh.. ma just mõtlesin, et mingi pika ja keerulise struktuuriga klassi pole mõtet siia pritsida - asjast abi üsna vähe. Kui keegi korralikumat seletust (või isegi artiklit/õpetust) asjast ei kirjuta siis ma nädalavahetusel (ehk) nokitsen midagi valmis.

Kusjuures, mis ongi naljakas, et minu kerneli koodi polegi vaja vaadata.
Kõige lihtsam näide, et teed faili test.tpl.html ja paned sinna sisse näiteks rea {var:test}
Teed teise faili pohi kuhu sisse paned paise ja asjad ning {var:title} {var:pohi}
PHP kood:


class test extends kernel{
  function 
test(){
     
$this->setVar('test','See on esimene proov template tööle saada klassiga::'.__CLASS__.'; Funktsiooniga::'.__FUNCTION__.'; File::'.__FILE__.'; Line::'.__LINE__);
  }
  
# kuna konstruktor ei saa tagastada kohe andmeid, siis peame tegema funktsiooni, mis tagastaks
  
function init(){
     return 
$this->render();      
  }
}
class 
pohi extends kernel{
  function 
pohi(){
      
// kutsume välja test klassi
    
$test = new test();
    
$this->setVar('title','Siia lehe sisse on peidetud klass test');
    
$this->setVar('pohi',$test->init());
    echo 
$this->render();    
  }
  function 
init(){
      return 
$this->render();
  }
}
// kutsu põhi välja ja vaata, mis talle külge kleebitud on
new pohi;



___________________________________________________
\"A bus station is where a bus stops. A train station is where a train stops.
On my desk, I have a workstation...\"
Anomaaliad toimuvad Area 51

20.01.2005 18:30:07 Vajutades siia näed kasutaja mrq profiili

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
RE: class'id

Tsiteeritud tekst:
hmh.. ma just mõtlesin, et mingi pika ja keerulise struktuuriga klassi pole mõtet siia pritsida - asjast abi üsna vähe.


Nõus, et pikast näitest ei ole abi, sest see ei seleta mulle ära miks nii parem on (+ see et ma pole classide tööpõhimõttesse väga süvenenud - järelikult ei pruugi ma koodist aru saada).

Näiteks on mul tehtud üks funktsioon mis suhtleb andmebaasidega (select, update, insert käsud, vigade puhul annab erroreid, selecti puhul annab info välja arrayna mida saan edasi kasutada jne). S.t. et koodis on tavalise 3-4 rea asemel üks rida, kus on funktsioon ja ongi kõik (vaevalt ju keegi näiteks date() funktsiooni asemel hakkab oma lehel ise arvutama, kuidas mingid kuupäeva formaati kuvada - olgugi, et ise tegin sellise functsiooni nagu date_est() mis väljastab kõik info täpselt nagu date() ainule et eesti kuude jne nimedega). Miks kasutada klasse?


Ootan veenvaid vastuseid

Seda postitust on muudetud 5 korda (viimati muudeti 2005-01-20 19:32:58 powerpuff poolt)

20.01.2005 19:16:00 Vajutades siia näed kasutaja powerpuff profiili

mrq


Postitusi: 338
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10
RE: class'id

Tsiteeritud tekst:
Ootan veenvaid vastuseid

Jah ma olen Sinuga täiesti nõus, et veenvad vastused oleksid toredad aga see on sama, et üks loll jõuab rohkem küsida, kui 100 tarka vastata!
Et ma jõuaks ennem mingi skripti valmis kirjutada klasside põhjal, kui seda, et Sind ümber veenda
Veenma pead ise ennast ja uurima samuti. Huvitav, et mis materjali Sa senimaani oled lugenud ja mida Sa kõrvataha oled pannud? Uuri koodi ja nii saad palju targemaks! Klasside käsitlusviise on päris mitu. Alustades extendimisega ja minnes edasi viitamise,  linkimise, meetodi väljakutsumise ja muutuja sidumisega erinevate klasside vahel.

Mina alustasin oma koodi kirjutamist nüüd juba 3-4 aastat tagasi. Olen siin foorumis olnud praktiliselt algusest saadik. Kui vaadata minu küsimusi ja vastuseid mõned aastad tagasi ja vaadata nüüd, siis olen ma jõudnud klassideni alles nüüd. Vahepeal on olnud palju teisi põhjuseid miks mitte kasutada klasse. Kasvõi koodi kiiruse pärast!
Klassidega hakkasin tegelema puhtalt sellepärast, et iga neid on lihtsam hallata ja neid on lihtsam luua ja kasutada.
Samuti tahtsin hoida tegevust ja meetodeid eraldi sellest, mis välja kuvatakse. Põhimõtteliselt kood, kus ei ole mingit HTML koodi sees. Ainult tegevus! Klasse lihtsalt sellepärast ei ole mõtet kasutada, et näe mul on klass ja nii tore, vaid peab ka olema mingi süsteem või eesmärk(PHP4 puhul, sest lubab ka teist lähenemisviisi, PHP5 puhul on lähenemine täiesti arusaadav, kuid süsteem on ikkagi vaja enda järgi seadistada, sest süsteemi mudeleid on erinevaid).

Peamine erinevus tavalise "ülevalt alla" koodi ja klasside vahel on see, et ülevalt alla kood teeb kõike väga hästi ja ilusti ning kiiresti aga kui on vaja hakata sellel koodil dünaamiliselt parameetreid muutma, siis võib päris jänni jääda. Samuti on "ülevalt alla" koodi puhul oht, et mõnda asja tehakse topelt või midagi jääb kahe silma vahele jne. Või mõtle ise, mis Sind härinud on mõne koodi puhul? Näiteks tahan endale login lehte! Igast koodid on aga kas need töötavad nii nagu Sina tahad? Kas on kerge neid muuta vastavalt Sinu vajadustele? Või panna tööle nagu Sina tahad? Või kas arvad, et see on piisavalt kompaktne?

Aga näide Sinu date_est() funktsiooni kohta oleks, et kui seda tahaks kasutada ka mõni mitte eestlane. Kood ise on hea aga parameetreid ei saa muuta muud moodi, kui käsitsi. See tähendab, et peab käe koodi sisse panema.
Loomulikult lõppkokkuvõttes võiks öelda, et manuaalne lähenemine asjale annab kõige kiirema tulemuse kasutamisel aga kas ta ka kõige mugavama ja kiirema lähenemise annab?
Klass võimaldaks n.ö. "käed koodist" eemal hoida ja lasta mängida Sinu valitud parameetrite järgi!

Seega pole tegelikult veenmises asi, vaid selles kas arvad, et Sul on seda vaja! Kui ei ole, siis ei ole vaja punnida  ennast seda kasutama ja muidugi viitsimise küsimus

P.S. kui Sa ei saa klasside ideloogiast aru, siis ma võin garanteerida, et Sul läheb veel kõvasti aega ennem, kui selle endale lahti suudad mõtestada eriti PHP4's.

Seda postitust on muudetud 3 korda (viimati muudeti 2005-01-20 20:08:20 mrq poolt)

___________________________________________________
\"A bus station is where a bus stops. A train station is where a train stops.
On my desk, I have a workstation...\"
Anomaaliad toimuvad Area 51

20.01.2005 19:54:40 Vajutades siia näed kasutaja mrq profiili

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
RE: class'id

Kui aus olla siis üle pika aja üks asjalik vastus ka sellise üldisema küsimuse kohta.
Ja ma tean, et tegelikult ei pea keegi tegelema minu veenmisega, sest ma arvan, et ma pole viimane kes sellise küsimuse võib esitada ning ka seda, et eks ma pean ise teadma kas ja kuidas mul asjad peavad toimima.

Ise olen teinud PHP's asju kuskil alla kahe aasta ja seni pole olnud juhust, et asja ei saaks tehtud nii, et ta toimiks vastavalt vajadusele. Võibolla ei oskagi klasside võimalusi hinnata, ja võibolla olekski õigem nendega natuke niisama katsetada, aga kui aus olla siis ei tule pähe ühtegi asja millega klasse katsetada. Eks see ole harjumise asi ka. Seni pole neist puudust tundnud. :P Vaatasin siin õpetuste all olevat näidet, kus oli tehtud mingite menüüde asi klassidega, aga kuna endal on tavaliselt kõik menüüd mingit pidi seotud ka andmebaasidega, siis ei näinud sellel näitel mõtet.. või.. see pole õige sõna selle jaoks.

Aga mõni hea võrdlus oleks ikkagi oodatud - reaalne kuid mitte väga pikk kood. Siis saaks kohe uurida, et miks nii ja miks mitte naa :P

20.01.2005 20:05:29 Vajutades siia näed kasutaja powerpuff profiili

eero


Postitusi: 890
Tase: 8
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: class'id

No kõige algelisemad näited leiad ikka php.net lehelt: http://ee.php.net/oop

___________________________________________________
This foreign policy stuff is a little frustrating! - George W. Bush

20.01.2005 20:15:43 Vajutades siia näed kasutaja eero profiili

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
RE: class'id

Ära arva et ma pole seda lehte külastanud (kui aus olla siis on mul terve see manual arvutiski olemas).

20.01.2005 20:18:27 Vajutades siia näed kasutaja powerpuff profiili

mrq


Postitusi: 338
Tase: 6
Olek: Offline

Hinnang: Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10Administratiivhinnang: 6/10
RE: class'id

Aga näide sellest, et kuidas panna klass kuulama seda võtit masiivis, mida Sina tahad!
PHP kood:


class entry{
  var 
$var;
  var 
$_var;
  function 
entry(){
  }
  function 
setVar($set 'a'){
    
$this->_var $set;
  }
  function 
getVar($array){
    if(
is_array($array))
      if (
array_key_exists($this->_var$array))
        
$this->var $array[$this->_var];
  }
  function 
show(){
  echo 
$this->var;
  
// kood
  
}
}
$a = new entry;
$a->setVar('muutuja');
$a->getVar($_GET);

$b = new entry;
$b->setVar('b');
$b->getVar($_GET);

$a->show();
$b->show();

echo
'<a href="?muutuja=23">muutuja</a>';
echo
'<a href="?b=ddd">muutuja</a>';


Et miks see hea on ja mis see erineb sellisest lahendusest, et:
PHP kood:


if(isset($_GET['b'])){
$b $_GET['b'];
}
echo 
$b;
if(isset(
$_GET['muutuja'])){
$muutuja $_GET['muutuja'];
}
echo 
$b.$muutuja;
//kood


Pealt näha nagu tundub, et tõesti mõtetu klass jne.
Aga oletame, et nüüd see kood kasutab neid muutujate väärtusi, mis saab aga siis kui oleks vaja kasutada mõlemaid neid muutujaid 'b' ja 'muutuja' selle koodi sees? Jama kui palju, et teeme kaks koodi, et üks kasutab ühte muutujat ja teine teist muutujat ja siis paneme järjest
PHP kood:


//kood kasutab $muutujat
//kood kasutab $b


Või ei? Saame veel parema lahenduse ja paneme koodi funktsiooni sisse ja läbi selle teeme muutuja üheks ning kutsume siis eraldi juhul funktsiooni erinevate väärtusetaga välja.
PHP kood:


function kood($sisend){}
kood($muutuja);
kood($b);



Aga nüüd tuleb lisaks veel üks probleem!
Sul on oma süsteem, mis juba kasutab neid muutujaid. Nad on n.ö. hõivatud 'b' ja 'muutuja' ei saa kasutada! Mis teeme? Muudame ära koodis? Selge läheb küll aega aga need muudatused saavad tehtud ja isegi replace otsing aitab asja

Aga mõtle kui lihtne oleks ainult ühe korra seda teha? Ühes kohas vahetad 'b' ja teises kohas 'muutuja'.

Pluss üks probleem veel. Sul oleks vaja, et mingi Sinu süsteem oskaks suhelda selle koodiga. Ülalt alla koodiga tekiks vist probleeme, et sealt andmeid küsida, et tahaks teada, mis muutujaid kasutad ja mis väärtused oled saanud, et saaks neid kuskil oma süsteemis kasutada aga ilma klassidetata on see suht võimatu!

Pluss veel lisaks sellele tahaks pöörduda kõrgem klass tema poole dünaamiliselt ning enda sisse kutsuda ja kasutada. Ehk siis tuleb vaadata klassi süsteemi, kui püramiidi struktuuri, et üks asi teise sees. Kukuruška

Oki ma loodan, et see veidi avasi Sinu silmi

Seda postitust on muudetud 7 korda (viimati muudeti 2005-01-20 20:47:28 mrq poolt)

___________________________________________________
\"A bus station is where a bus stops. A train station is where a train stops.
On my desk, I have a workstation...\"
Anomaaliad toimuvad Area 51

20.01.2005 20:32:51 Vajutades siia näed kasutaja mrq profiili

marianne

Postitusi: 539
Tase: 7
Olek: Offline

Hinnang: Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10Administratiivhinnang: 9/10
RE: class'id

Tooksin näiteks ühe lühikese klassi, mille kirjutasin mysql'i ühendust käsitsema.
Funktsionaalsus on küll madal, aga mida ta teeb on:
  1. alustab ise ühenduse, vahetult enne esimest päringut
  2. fetch'ib tulemused, väljastab array'na, kui tellida ($return_data)
  3. peab errori logi

Kasutamine samuti lihtne:
Koodijupp:
$mysql=new c_mysql('user','pass','tabel','localhost');
$vastus=$mysql->query("SELECT * FROM TABLE",true);

PHP kood:

class c_mysql
{
  var 
$conn=false;
  var 
$_dbase;
  var 
$_user;
  var 
$_pass;
  var 
$_server;
  var 
$error array();

  function 
c_mysql()
  {
    global 
$seaded;
    
$this->_user $seaded['username'];
    
$this->_pass $seaded['password'];
    
$this->_dbase $seaded['dbname'];
    
$this->_server $seaded['host'];
  }

  function 
connect()
  {
    if (!(
$this->conn mysql_connect($this->_server,$this->_user,$this->_pass)))
    {
      
$this->error[] = mysql_error();
    }
    elseif (!(
mysql_select_db($this->_dbase,$this->conn)))
    {
      
$this->error[] = mysql_error();
    }
  }

  function 
query($query,$return_data=false)
  {
    if (!
$this->conn) {$this->connect();}

    if (
$return mysql_query($query,$this->conn))
    {
      if (
$return_data)
      {
        
$out=array();
        while (
$data mysql_fetch_assoc($return))
        {
          
$out[] = $data;
        }
        
mysql_free_result($return);
        return 
$out;
      }
      else
      {
        return 
$return;
      }
    }
    else
    {
      
$this->error[] = "MySql : ".mysql_error();
    }
  }
}



___________________________________________________
Kus midagi näed laita, sinna mine ja kritiseeri.

20.01.2005 21:30:39 Vajutades siia näed kasutaja marianne profiili

muidumeez
Ignorantia non est
argumentum


Postitusi: 3864
Tase: Administraator
Olek: Offline

Hinnang: Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10Administratiivhinnang: 10/10
RE: class'id

Veenvaid vastuseid ei ole. On kogemus ja praktika. Kes kord klasse kasutama on hakand, ei see neist enam loobu. Ja pole vaja mingit veenmist.
Teiseks, rääkida klassidest on üldiselt väär. Sõna OOP ei viita ühegi sõnaga klassidele. Ta viitab OBJEKTIDELE. Klass ei ole objekt. Klass on objekti abstrakne kirjeldus. Seega ei ole mõtet arutada, kas klassid on paremad kui funktsioonid, arutada tuleks, kas süsteemi kirjeldamine objektidena või funkstioonidena on õigem, effektiivsem jne jne.
Kolmandaks, objektidest loobumine kiiruse tõstmise seisukohast on suhteliselt mõttetu. Kui meil on tegu suuremate süsteemidega, siis pöördub süsteem pigem objektide kasuks. Samas on kiirusevahed marginaalsed, pigem teeb üks loll päring sada, tuhat korda lehte aeglasemaks kui see, kas kasutada objekte või funktsioonijadasid või üldse haljast koodimassi. Enamus siinsetest skriptidest on just viimast tüüpi, aga nad on ka puhtakujuline saast.
Olen ise objektorienteeritult programmeerinud ligi 15 aastat (number on õige!), alustasin omal ajal Turbo Pascal 5.5 ga. Objektorienteeritud programmeerimise paradigma on minu meele järele, ja mina teda kasutan.
Kes ei taha, ärgu kasutagu, enda asi. Neist ei saa ka tulevikus paraku asja, sest OOP, see on meie ajastu au ja südametunnistus :p

___________________________________________________
An Opinion Is Like An Asshole -- Everybody Has One

20.01.2005 22:47:10 Vajutades siia näed kasutaja muidumeez profiili

powerpuff


Postitusi: 40
Tase: 3
Olek: Offline

Hinnang: Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10Administratiivhinnang: 5/10
RE: class'id

Seda ma usun, et veenvaid vastuseid ei ole, vaid on kogemused ja praktika.
Ja eks ma olengi võtnud selle seisukoha, et erinevate võimaluste kasutamine tulebi läbi nende.


Mida tähendab OOP? Lugege: http://java.sun.com/docs/books/tutorial/java/concepts/ (OOP mõiste seletab väga hästi lahti + on ka mõned näited - javas).

21.01.2005 11:03:18 Vajutades siia näed kasutaja powerpuff profiili

Kokku on 17 postitust, jaotatud 2 leheküljele: 1-2. Praegu näidatakse postitused 1-15.

Kokku: 25950 registreerunud kasutajat, 9711 teemat, 54603 postitust.
Täna on laupäev, 25. jaanuar 2020. Kell on 09:34.

    Vaata selle lehe printerisõbralikku versiooni

Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2020 PHP Center. Kõik õigused reserveeritud.