Ik heb al enkele tuts ivm OOP gevolgd maar het wil mij nog steeds niet lukken.
Ik heb al zitten zoeken en kijken naar oop scripts maar ik geraak er maar niet aan uit. Kan iemand mij misschien een klein scriptje tonen met OOP en zonder OOP dat net hetzelfde doet dan kan ik daar verder uit leren.
Tuurlijk registreer je iemand die een verkeerd e-mail adres ingeeft
Alleen als je 1 en hetzelfde formulier gebruikt voor login en register. Ik laat bestaande gebruikers niet inloggen op mijn registratie-formulier. Dan weet ik dus al of iemand zich wil registreren of inloggen en daarop reageer je door of de gebruiker te registreren of in te loggen. Dat hoeft mijn script niet uit te zoeken. Lijkt me wel zo duidelijk.
Kan zijn dat ik er helemaal naast zit hoor. Ben maar een amateur, dus hoor het graag als het anders is.
Ik doe alleen profiel updates en registraties in 1 methode, inloggen is weer een hele andere controller.
Wie laat nou iemand inloggen op een registratie formulier?
Bij mij is het gewoon luiheid dat ik save() gebruik, en die 1 keer implementeer.
En dat ik er niet voor kies iedere keer zelf moet gaan kijken of het een update is of een registratie.
Dit kan dan namelijk een stuk makkelijker zijn op het moment dat je classes gaat gebruiken om formulieren naar voren te toveren, maar dat komt nog wel een keer ;)
public function __construct(Database $db)
{
$this->db = $db;
}
?>
@ jelmer, moet er bij dit stuk bij $db niet de host/gebruikersnaam/wachtwoord/database?
edit:
<?php
public function create($author, $content)
{
return $this->db->insert('guestbook', array(
'author' => trim($author),
'content' => trim($content),
'added_on' => new DateTime()
));
}
?>
kan je i.d.p.v. new DateTime() niet gebruik maken van de mysql_functie NOW() of gaat dat niet met pdo
Wat ik mij nu afvraag: Ik zie jou overal het volgende doen:
"register(User $user, $password)"
"__construct(User_Store $users)"
Je geeft aan de methods iets mee dat geen variabele is. Kun je mij uitleggen wat dat precies is en waarom je dit doet? Dus: "(User" en (User_Store".
Ik geef aan van wat voor class $user een instantie moet zijn. Zo kan je bij register($user, $password) aan $user alleen maar een instantie van de class User meegeven.
PHP Jasper op 28/12/2010 12:11:50
@ jelmer, moet er bij dit stuk bij $db niet de host/gebruikersnaam/wachtwoord/database?
$db is een instantie van Database, en Database is gemaakt met een instantie van PDO, en die instantie van PDO is gemaakt met m'n gebruikersnaam/wachtwoord/pad-naar-sqlite-database.
PHP Jasper op 28/12/2010 12:11:50
kan je i.d.p.v. new DateTime() niet gebruik maken van de mysql_functie NOW() of gaat dat niet met pdo
Kan ook, maar in mijn voorbeeld met die Database class zou 'NOW()' die quote-stap niet overleven, en letterlijk als de tekst NOW() worden geïnterpreteerd. En aangezien ik graag DateTime objecten gebruik, leek dit me even een gemakkelijke oplossing. Meestal gebruik ik een Database class achtig ding dat ook gewoon rauwe SQL aankan, en dan zou je NOW() kunnen gebruiken.
Nicoow Unknown op 28/12/2010 10:27:42
De manier van een save methode in een User object is in mijn optiek ook niet correct OO, maar ik heb me door ervaren rotten op het gebied laten vertellen dat dat het wel is, maar iedereen z'n eigen smaak.
Het is inderdaad smaak, maar ik probeer zelf altijd ervoor te zorgen dat als je een object hebt, dat het object ook compleet en correct, en meteen bruikbaar is. Altijd. Value semantics, data hiding oid. Daarom dus geen public properties (want dan kan de class niet de waarden in die variabelen controleren, en kan hij niet garanderen dat het klopt) en daarom ook geen lege new User() aan kunnen maken, want die User is geen echte user, want hij is incompleet. Niet altijd even praktisch, maar volgens mij wel correct. En als je aan het leren bent kan je het het best correct leren, en dan langzaam afglijden naar praktisch lijkt mij.
Oke, er is nog één probleem ik snap niet hoe ik kan communiceren met mijn database. Dus ik moet een pdo class gebruiken maar is het mogelijk dat ik bij elke functie zelf mijn query kan typen. Dus bijvoorbeeld dat ik bij mijn functie delete($id) de query maak DELETE FROM guestbook WHERE id='".$id."'
Ik heb hier in de week ook een topic gehad omdat het deel interactie database en klassen me niet heel duidelijk was. Neem dit maar eens door. Vooral een van die laatste posts van Kris Peeters.