Avatar billede mysli Nybegynder
26. april 2005 - 18:23 Der er 4 kommentarer og
1 løsning

Problem med class

Jeg er lige begyndt på læreren om classes.

For lige at teste min viden ind til nu, vil jeg lave et interaktivt bjørne program.

Det går i sin enkelhed ud på, at man opretter en bjørn, derefter kan den så sove, løbe og spise. Alt efter hvor meget den løber, mister den energi og får således også energi af at sove.

Classen tager udgangspunkt i en artikel på zend, og den volder utrolig nok ingen problemer.

Her et mit script;

<?php
    require("class.php");
?>
<html>
<head>
<title>Kaspers bjørn</title></head>
<body>
<table>
    <?php
    if ($_GET['opret']==TRUE){
        ?>
        <form action="index.php" method="POST">
        <table>
            <tr>
                <td>Bjørnens navn: <input name="navn" type="text"></td>
                <td><input type="submit" value="Opret bjørn"></td>
            </tr>
        </table>
    </form>
<?php
} else {
    ?>
   
   
    <tr>
        <td><a href="?opret=TRUE">Opret bjørn</a></td>
    </tr>
    <tr>
        <td><form action="<?php echo $php_self ?>" method="post">
        <table>
    <tr>
      <td>Løb <input type="text" name="lob"> km</td>
    </tr>
    <tr>
      <td>Sov <input type="text" name="sov"> timer</td>
    </tr>
    <tr>
      <td>Spis <input type="text" name="spis"> fisk</td>
    </tr>
    <tr>
      <td><center><input type="submit" value="Udfør handling"></center></td>
    </tr>
  </table>

    </form>   
    </td>
    <td>
        <?php
            if ($_POST['navn']==TRUE){
                $bjorn = new bjorn();
                $bjorn->navn = $_POST['navn'];
                echo "Bjørnen ".$bjorn->navn." er nu oprettet";
            }
            if ($_POST['spis']){
                if(isset($bjorn){
                $bjorn->spis($_POST['spis']);
            }}
            if ($_POST['lob']){
                if(isset($bjorn){
                $bjorn->lob($_POST['lob']);
            }

            if ($_POST['sov']){
                if(isset($bjorn){
                $bjorn->sov($_POST['sov']);

        }}
            ?>
</td>

    </tr>
</table>
<?php
}
?>
</body>
</html>

Efter hver $_post check, ser jeg om $bjorn er blevet sat, ellers for man selvfølgelig ikke lov til at ændre en class som ikke er oprettet. Man kan så oprette en, og kalde den et navn.

Men når jeg har oprettet en bjørn, og prøver at køre en af de andre funktioner, gør den ikke noget. $bjorn er åbenbart ikke blevet sat længere. Er der en måde så jeg kan checke om et objekt er blevet oprettet?
Avatar billede dennismp Nybegynder
26. april 2005 - 18:32 #1
Problemet er at variablen bliver nedlagt når siden er udført. Dvs næste hit, der findes den ikke. Du kan bruge sessions til at "huske" den så den ikke forsvinder hver gang.

tilføj dette i toppen af dit script:
session_start();
if(! isset($_SESSION['bjorn']) )
  $_SESSION['bjorn'] = new Bjorn(); // Opret bjørnen i session hvis den ikke findes

$bjorn = &$_SESSION['bjorn'];  // gør så du kan skrive $bjorn istedet for $_SESSION['bjorn'];


Nu er der altid en $bjorn objekt som du kan bruge. Og den "husker" den
Avatar billede mysli Nybegynder
26. april 2005 - 19:08 #2
Mange tak - tænkte nok det hvor sådan noget lignende.

Svar tak:)
Avatar billede dennismp Nybegynder
26. april 2005 - 19:47 #3
ok :)
Avatar billede mysli Nybegynder
26. april 2005 - 19:51 #4
Mit fremragende program kan forresten prøves her;
www.antihelt.dk/class :)
Avatar billede dennismp Nybegynder
26. april 2005 - 20:00 #5
Fanme en doven bjørn :)

Nu må Thomas sove
Thomas sover 10 timer...
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