04. februar 2005 - 15:42Der 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?
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'; }
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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; } }
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.
Synes godt om
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!
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.