Avatar billede 7th Praktikant
14. oktober 2003 - 22:30 Der er 14 kommentarer og
1 løsning

Class, functions og variabler

Jeg har brug for hjælp til nedenstående.

class Klasse {

var $test;

function abc() {
definerer $abc;
brug $this -> test;
}

function def() {
definerer $def;
brug $abc;
brug $this -> test;
}

function ghi() {
definerer $ghi;
brug $abc;
brug $def;
brug $this -> test;
}
}

$opret = new Klasse();

$opret -> test = 123;
$opret -> abc();

1: hvordan kan jeg bruge var $test i alle functions?
2: hvordan kan jeg bruge definerede variabler fra den foregående function i de næste functions?
Avatar billede googolplex Novice
14. oktober 2003 - 23:02 #1
Alle funktionerne kan tilgå classen variabler med:

$this->variabel

Er det det du mener ?
Avatar billede 7th Praktikant
14. oktober 2003 - 23:08 #2
Ja i den retning...

class Klasse {

var $test, $abc, $def;

function abc() {
definerer $this -> abc = something;
brug $this -> test;
}

function def() {
definerer $this -> def = something;
brug $this -> abc;
brug $this -> test;
}
}

Er dette den rigtige måde at gøre det på?
Avatar billede googolplex Novice
14. oktober 2003 - 23:15 #3
class Klasse {

    var $test = 'defaultværdi';
    var $abct = 'defaultværdi';
    var $def = 'defaultværdi';

    function setTest($nytest) {
        $this->test = $nytest;
    }

    function getTest() {
    return $this->test;
    }
}

sådan sætter du defaultværdier, giver dine klaasevariabler nye værdier, og returnere dem fra klassen, men er ikke sikker på om det er det du vil :)
Avatar billede googolplex Novice
14. oktober 2003 - 23:17 #4
$nyklasse = new Klasse();
$nyklasse->setTest('En ny vaerdi');
$testvaerdi = $nyklasse->getTest();
echo $testvaerdi;

osv.
Avatar billede 7th Praktikant
14. oktober 2003 - 23:26 #5
Nah, ikke helt :o) Jeg tror jeg har fået fat i grundprincippet, det lader ihvertfald til det når jeg tester min class, dog får jeg to fejlmeddelelser, som jeg håber du eller en anden kan hjælpe med.

Min class består af tre functions. Min anden function ser således ud.

function tagster()
{
$tagster = str_replace ($this -> textlinks[$this -> string] , "" , $tagster);
}

Hvorfor brokker den sig over variablen $tagster (Undefined variable: tagster)?

Sidst, hvordan kan jeg bruge ovenstående function inde i min næste function? Jeg troede man bare kunne sige, tagster($this -> links), men den går åbenbart ikke (Call to undefined function: tagster()).
Avatar billede googolplex Novice
14. oktober 2003 - 23:49 #6
Hvis du skal bruge $tagster i mere end en metode (funktion) skal du bruge:

var $tagster;

$this->tagster - men det ved du vel ?

Er ikke hel sikker på det andet, undrer faktisk mig selv lidt over det, men tror det er:

Klasse::tagster() eller Klasse::tagster
Avatar billede 7th Praktikant
14. oktober 2003 - 23:56 #7
Jeg vidste det ikke, eller jo det gør jeg jo, tænkte mig bare ikke lige om ;o) Et øjeblik...
Avatar billede 7th Praktikant
15. oktober 2003 - 00:18 #8
Kan du fortælle mig hvorfor den ikke vil vise det der står på linie 52.

http://www.biimstudio.1go.dk/navigation.php
Avatar billede 7th Praktikant
15. oktober 2003 - 04:38 #9
Jeg må have gjort noget galt et sted, så prøver lige igen i løbet af imorgen, og vender så tilbage.

class Test
{
var $variabel;

function abc()
{
return $this -> variabel / 2;
}

function def()
{
echo Test :: abc() + $this -> variabel;
}
}

$tagster = new Test();
           
$tagster -> variabel = 2;
$tagster -> abc();
$tagster -> def();

virker jo fint nok...
Avatar billede 7th Praktikant
15. oktober 2003 - 20:26 #10
Hvis du vil have nogle points må du lægge et svar.

Jeg har iøvrigt næsten løst mit problem...
Avatar billede googolplex Novice
15. oktober 2003 - 22:08 #11
Øh, ok, men har jeg hjulpet dig ?

Hvordan fik du løst dit problem ?
Avatar billede 7th Praktikant
15. oktober 2003 - 23:46 #12
OK, indrømmer du ikke har bidraget med det helt store, men det at du har kommet med kommentarer, kan godt betragtes som god hjælp :o)

1: jeg ville prøve at lave en class som skulle styre billedelinks i min menu.
2: jeg havde ikke helt styr på grundprincippet i forbindelse med en class og så nogle med functions, derfor spurgte jeg.
3: der var ikke andet for end at kaste sig over det og prøve sig frem.
4: sådan løste jeg problemet, så nu står jeg med min første selvlavede class som styrer min menu.
5: revolutionerende er det langt fra, men et lille skridt tættere på noget oop.
6: sådan kom min class til at tage sig ud http://www.biimstudio.1go.dk/menu.php
7: jeg er en lettet og glad mand nu :o)
Avatar billede googolplex Novice
15. oktober 2003 - 23:57 #13
Så der var ingen problemer i at kalde en metode fra en anden metode ?

Takker for point, sidder selv og roder med klasser, har lige lavet følgende som en prøve:

class Database
{
    var $mServer    = 'localhost';
    var $mUsername  = 'ladefoged_roenn';
    var $mPassword  = '69LR8x6m';
    var $mDatabase  = 'ladefoged_roenn';
    var $mIdentifier = false;
    var $mRows      = array();
    var $mResult;
    var $mSql;

/* Metode der sætter attributten '$mSql' */

    function SetSql($newSql)
    {
        $this->mSql = $newSql;
    }

/* Metode der åbner en forbindelse til MySQL-serveren og vælger en database*/

    function OpenConnection()
    {
        $this->mIdentifier = mysql_connect($this->mServer, $this->mUsername, $this->mPassword);

        if (!$this->mIdentifier)
        {
            $this->PrintError('Der kunne ikke oprettes forbindelse til MySQL-serveren: ' . $this->mServer);
        }

        if (!mysql_select_db($this->mDatabase, $this->mIdentifier))
        {
            $this->PrintError('Kunne ikke selektere MySQL-databasen: ' . $this->mDatabase);
        }
    }

/* Metode der lukker en forbindelse til databasen */

    function CloseConnection()
    {
        if (!mysql_close($this->mIdentifier))
        {
            $this->PrintError('Kunne ikke lukke forbindelsen til MySQL!');
        }
    }

/* Metode der udfører SQL-forespørgsler */

    function DoQuery()
    {
        if (!$this->mIdentifier)
        {
            $this->PrintError('Du mangler at åbne en forbindelse til databasen!');
        }

        $this->mResult = mysql_query($this->mSql, $this->mIdentifier);

        if (!$this->mResult)
        {
            $this->PrintError('Kunne ikke udføre forespørgslen: ' . $this->mSql);
        }
    }

/* Metode der returnerer x antal rækker som et array af objecter */

    function GetRows()
    {
        $this->DoQuery($this->mSql);

        while ($row = mysql_fetch_object($this->mResult))
        {
            $this->mRows[] = $row;
        }

        return $this->mRows;
    }

/* Metode der udskriver fejl */

    function PrintError($error = 'Der er opstået en fejl')
    {
        echo '<p><b>' . $error . '</b></p>';

        if ($mysql_error = mysql_error())
        {
            echo '<p>Fejlen er: <b>' . $mysql_error . '</b></p>';
        }

        exit;
    }
}
Avatar billede 7th Praktikant
16. oktober 2003 - 00:35 #14
Nej, som du sagde, så kan man enten bruge Class :: function() eller $this -> function().
Avatar billede 7th Praktikant
16. oktober 2003 - 00:40 #15
http://www.jong.frac.dk/jong/ sådan tager min class sig ud i funktion...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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