Avatar billede kthiesen Novice
28. februar 2010 - 14:53 Der er 12 kommentarer og
1 løsning

Hvordan kan jeg få forskellige variabler ud af en extended class i PHP

Hej eksperter!

Jeg har følgende klasse i et program jeg er ved at skrive, og ja, jeg ved der findes dato klasser, men jeg vil gerne lære noget om oop med php.

Her er klassen:

abstract Class Dato{        // abstract class Dato oprettes

public $dag;
public $maaned;
public $aar;
public $aar2;

function display_dag() {
    // dag
        $dag_header=<<<EOD
        <select name="dag"><option value="" selected>dag</option>
EOD;
        $dag    =    "1";
        $dag_options = '';
        while ($dag<=31 ) {
            $dag_options .=<<<EOD
                <option value="$dag">$dag</option>
EOD;
            $dag++;
    }
    $dag_footer ="</select>";   
        $dag =<<<EOD
              $dag_header
              $dag_options
              $dag_footer
EOD;
        echo $dag;
}

function display_maaned() {
    // måned
        $maaned_header=<<<EOD
        <select name="maaned"><option value="" selected>måned</option>
EOD;
        $maaned    =    "1";
        $maaned_options = '';
        while ($maaned<=12 ) {
            $maaned_options .=<<<EOD
                <option value="$maaned">$maaned</option>
EOD;
        $maaned++;
    }
        $maaned_footer ="</select>";   
        $maaned =<<<EOD
              $maaned_header
              $maaned_options
              $maaned_footer
EOD;
        echo $maaned;
}

function display_aar() {
    // år
        $aar_header=<<<EOD
        <select name="aar"><option value="" selected>år</option>
EOD;
        $aar    =    date('Y');
        $aar2    =    $aar+20;
        $aar_options = '';
        while ($aar<=$aar2 ) {
            $aar_options .=<<<EOD
                <option value="$aar">$aar</option>
EOD;
        $aar++;
        }
        $aar_footer ="</select>";   
        $aar =<<<EOD
              $aar_header
              $aar_options
              $aar_footer
EOD;
        echo $aar;
    }
}

Beklager formateringen - den ser ikke så godt ud som i notepad++ ;-)

Det virker fint i programmet når jeg indsætter en enkelt dato - blot til orientering.

Jeg ønsker at få flere sæt (instanser ?) af variabler til forskellige datoer.

Programmet skal bruges til at indsamle data over nogle dage, og der skal derfor være tre-fire sæt dag-måned-år.

Jeg kan ikke finde ud af hvordan jeg laver en datter klasse med nye variabler baseret på forældre klassen herover.

Jeg er nærmest desperat, fordi jeg har læst og læst i manualen og nogle bøger jeg har, men det giver inden mening.

Så hjælp!

Jeg sætter 200 point på højkant, fordi det er vigtigt for mig at forstå dette.
Avatar billede arne_v Ekspert
28. februar 2010 - 15:59 #1
Jeg er lidt forvirret over hvad du vil.

Skal din klasse repraesentere dato data eller skal den formatere en dato til HTML? Det er ikke godt at mixe data og HTML formatering.

Og hvad skal du bruge sub klasser til. Hvis du har flere datoer skal du vel bare have flere instanser af en enkelt klasse.
Avatar billede arne_v Ekspert
28. februar 2010 - 15:59 #2
Public fields er ioevrigt ikke saa paent.
Avatar billede kthiesen Novice
28. februar 2010 - 16:15 #3
Hej Arne

Jeg genererer en mulighed for at vælge dag, måned og år, der så skal samles til et input i en database.

Med hensyn til sub klasser er det netop her jeg er lidt i tvivl.

Hvis jeg gerne, ud fra ovenstående, vil lave flere eksemplarer af en dato ud fra dag+måned+år med hver sin variabel før jeg sætter det hele ind i databasen, hvordan gør jeg så det.

Et simpelt forsøg på at vise hvad jeg vil:

$afgang_lokation1 = dag+måned+år
$ankomst_lokation2 = dag+måned+år
$afgang_lokation2 = dag+måned+år

Det skal siges at jeg ikke er uddannet programmør, så jeg kan ikke fagsproget - endnu...

Men som en klog teoretiker sagde - det er gennem erfaring man lærer sig nye evner.
Avatar billede kthiesen Novice
28. februar 2010 - 16:17 #4
public ikke så pænt, næ, de burde nok være private - tak!
Avatar billede arne_v Ekspert
28. februar 2010 - 18:11 #5
Du bør skarpt adskille lagene i din applikation.

Nogle datoer som skal gemmes i en database har ikke noget med præsentations laget at gøre. HTML er præsentations lag.

Og jeg synes stadigvæk det lyder som om du skal bruge flere instanser af den samme konkrete klasse og ikke forskellige subklasser af en abstrakt klasse.
Avatar billede kthiesen Novice
28. februar 2010 - 19:47 #6
Ok, når jeg skal adskille lagene, hvordan får jeg så input til databasen?

Jeg tror jeg har forklaret mig dårligt. Jeg bruger koden i #1 til at lave tre select bokse i præsentationslaget. Her kan brugeren så vælge en dag, en måned og et år. Når brugeren trykker på submit knappen checkes for korrekt input og er input korrekt sendes data til databasen som een samlet post.

Er det muligt du kan give et eksempel på hvordan jeg laver instanser med forskellige variabler ud af ovenstående kode?

Jeg har nemlig prøvet mig frem uden held.

Som nævnt bruger jeg også dette program som en vej til at lære noget om oop, samt at opgradere min viden om php5. Jeg har tidligere programmeret lidt i php3/4, men har haft andre opgaver i nogle år, så jeg er ved at lære mig selv op fra bunden igen.
Avatar billede arne_v Ekspert
28. februar 2010 - 19:52 #7
Hvis du laver en constructor med 3 argumenter kan du lave instanser med forskellige data.
Avatar billede arne_v Ekspert
28. februar 2010 - 19:54 #8
Jeg ville lave 3 klasser:
- en data klasse som indeholder de 3 tal samt helt generelle metoder (valider om valid dato, læg antal dage til etc.)
- en UI klasse som kan lade brugeren vælge en dato og create en instans af data klassen
- en database klasse som kan gemme og hente en instans af data klassen til og fra databasen
Avatar billede kthiesen Novice
28. februar 2010 - 20:07 #9
De tre klasser har jeg, men essensen i mit spørgsmål er:

hvordan får hver ny instans sin egen variabel?

class dato {

function displayDato(){

kode

}
}
Det er her jeg er i tvivl...

er dette løsningen?

$dato1 = new dato;
$dato2 = new dato;
osv.

Hvis det er rigtigt, hvordan adskiller jeg så de tre variabler, der er i min klasse, dag - måned - år?
Skal det laves ved hjælp af et array?
Avatar billede arne_v Ekspert
28. februar 2010 - 20:21 #10
Den postede dato klasse indeholde både data og HTML formatering.
Avatar billede arne_v Ekspert
28. februar 2010 - 20:22 #11
Med den rigtige constructor kan du sjrive:

$dato1 = new dato(2010, 2, 28);
$dato2 = new dato(2010, 3, 1);
Avatar billede kthiesen Novice
28. februar 2010 - 22:44 #12
Aha, nu forstår jeg hvad du mener med class og præsentation.

Jeg skal lave mit class lib så det ikke indeholder HTML.

HTML skal kun findes i min form.php - sådan kort fortolket

Jeg ser på constructor.

Tak for hjælpen, smider du lige et svar!
Avatar billede arne_v Ekspert
28. februar 2010 - 22:58 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester