Avatar billede Slettet bruger
04. februar 2005 - 15:42 Der er 6 kommentarer og
1 løsning

Start på OOP i PHP

Hej!

Jeg har siddet og leget lidt med OOP (eller det der burde være OOP) og har brygget nedenstående eksempel sammen. Så er det at jeg vil høre om det ligner typisk objektorienteret kode (så tæt på som man kommer i PHP)?

Jeg ved godt at der ikke er protected variabler osv, men det er i PHP4.

Og er det den "korrekte" fremgangsmåde jeg har benyttet?

På forhånd tak!



##antal_logins.class.php


<?

class AntalLogins {

    function AntalLogins($ip, $tabelnavn) {
    $this->ipAdresse = $ip;
    $this->tabelNavn = $tabelnavn;
    }

    function sletGamleLogins() {
    $sql = 'DELETE FROM ' . $this->tabelNavn . ' WHERE TIME_TO_SEC(NOW()) - TIME_TO_SEC(tidspunkt) < 3600';
    $result = mysql_query($sql) or die('Der opstod en fejl: ' . mysql_error());
    }

    function tjekAntalLogins() {
    return true;
    $sql = 'SELECT * FROM ' . $this->tabelNavn . ' WHERE ip="' . $this->ipAdresse . '"';
    $result = mysql_query($sql) or die('Der opstod en fejl: ' . mysql_error());
        if(mysql_num_rows($result) >=3) {
        return false;
        }
    }

}






class VisAntalLogins extends AntalLogins {
var $antal;

function VisAntalLogins($ip, $tabelnavn) {
parent::AntalLogins($ip, $tabelnavn);
$this->antal = $antal;
}

function VisAntal() {
    $sql = 'SELECT COUNT(*) AS antal FROM ' . $this->tabelNavn . ' WHERE ip="' . $this->ipAdresse . '"';
    $result = mysql_query($sql) or die('Der opstod en fejl: ' . mysql_error());
    $row = mysql_fetch_array($result);
    echo 'Du har ' . $row['antal'] . ' fejlslagne logins';
}


}

?>


##logins.php

<?

include('../config.php'); //Min MySQL connect-fil
include('antal_logins.class.php'); //Min klasse

$adgang = new VisAntalLogins($_SERVER['REMOTE_ADDR'], 'cm3_brugere_logins');
$adgang->sletGamleLogins();
$adgang->VisAntal();
if($adgang->tjekAntalLogins() != true) {
echo 'Du har ikke adgang til denne side efter 3 forgæves login-forsøg. Luk dette vindue og prøv igen senere';
}

?>
Avatar billede arne_v Ekspert
04. februar 2005 - 19:33 #1
Nu er jeg ikke specielt PHP kyndig men:

function tjekAntalLogins() {
    return true; // <-------- skal den linie ikke flyttes ned i bunden ?
    $sql = 'SELECT * FROM ' . $this->tabelNavn . ' WHERE ip="' . $this->ipAdresse . '"';
    $result = mysql_query($sql) or die('Der opstod en fejl: ' . mysql_error());
        if(mysql_num_rows($result) >=3) {
        return false;
        }
    }
Avatar billede arne_v Ekspert
04. februar 2005 - 19:36 #2
Jeg tror iøvrigt ikke på din klasse struktur.

I forbindelsen med arv er der en "is a" regel.

En elefant "is a" dyr og derfor kan klassen elefant arve fra klassen dyr.

Men gælder det at VisAntalLogins "is a" AntalLogins ? Umiddelbart synes jeg NEJ.
Avatar billede Slettet bruger
04. februar 2005 - 21:26 #3
Jeg mener godt man kan sætte den til at returnere true til at starte med, for senere hen at ændre den til false, men det er sikkert lidt noget fusk ;)

Jeg kan se at hvis jeg følger "is a" analogien har jeg er problem, men eksemplet er også hurtigt strikket sammen. Normalt ville man vel slet ikke lave extensions til en klasse på samme tid som man lavede klassen, men først senere.

Men jeg forstår godt hvad du mener, og det er da rigtigt!
Avatar billede olebole Juniormester
05. februar 2005 - 06:28 #4
<ole>

Når der returneres i en funktion, afvikles kode ikke efter den linie, hvori der returneres:

<?
function bla() {
  print "Ole";
  return true;
  print "Bole";
}
bla();
?>

/mvh
</bole>
Avatar billede arne_v Ekspert
25. februar 2005 - 20:50 #5
el_barto>

Tid at få afsluttet her ?
Avatar billede Slettet bruger
28. februar 2005 - 14:38 #6
sry...

Læg et svar begge 2 :)
Avatar billede arne_v Ekspert
28. februar 2005 - 14:40 #7
kommer her
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