Stef schreef:Ik heb op dit moment een class die er ongeveer zo uitziet:
[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/class"]class[/URL] Account
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #0000BB]$eigenschap1[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #0000BB]$eigenschap2[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$id[/COLOR][COLOR= #007700]) {[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/is_numeric"]is_numeric[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$id[/COLOR][COLOR= #007700])) {[/COLOR]
[COLOR= #0000BB]$db[/COLOR] [COLOR= #007700]= new[/COLOR] Database[COLOR= #007700]([/COLOR][COLOR= #DD0000]"Databasenaam"[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]= ;[/COLOR][COLOR= #FF8000]//Hier wordt een query uitgevoerd enzo[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]eigenschap1 [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]][[/COLOR][COLOR= #DD0000]eigenschap1[/COLOR][COLOR= #007700]];[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]-[/COLOR]eigenschap2 [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$query[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]][[/COLOR][COLOR= #DD0000]eigenschap2[/COLOR][COLOR= #007700]];[/COLOR]
[URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]===[/COLOR] false[COLOR= #007700]) {[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Error: query returned false."[/COLOR][COLOR= #007700];
}
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Wrong use of function. Use an integer as parameter."[/COLOR][COLOR= #007700];
}
}[/COLOR]
Wanneer ik dus een lijstje met accounts wil maken, vraag ik eerst alle account IDs op en daarna initialiseer ik voor ieder ID een account class.
Maar gebruik ik dan niet overdreven veel querys? Is er een nettere manier om dit te doen?
Aantal tips:
- Gebruik excepties i.p.v. echo.
- Dependicy injection
- Ik zou een aparte class aanmaken voor databaseverkeer, bijvoorbeeld AccountDAO (DataAccessObject), hierin kan je dan bijvoorbeeld een functie maken met 1 query alle accounts ophaalt en een array met Account object terugstuurt.
toevoeging op donderdag 1 december 2016, 11
33:Als ik even snel een voorbeeldje uitwerk:
[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/class"]class[/URL] AccountDAO
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/private"]private[/URL] [COLOR= #0000BB]$dbConnection[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #FF8000]/**
* Constructor
*
* @param $dbConnection The PDO database connection
*/[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$dbConnection[/COLOR][COLOR= #007700])
{[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]dbConnection [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$dbConnection[/COLOR][COLOR= #007700];
}[/COLOR]
[COLOR= #FF8000]/**
* Gets all accounts
*
* @return Array with Account objects
*/[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getAllAccounts[COLOR= #007700]()
{[/COLOR]
[COLOR= #0000BB]$getAccountsResult[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]dbConnection[COLOR= #007700]->[/COLOR]query[COLOR= #007700]([/COLOR][COLOR= #DD0000]SELECT * FROM account[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$returnArr[/COLOR] [COLOR= #007700]= [];[/COLOR]
[URL="http://www.php.net/while"]while[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$accountRow[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$getAccountsResult[/COLOR][COLOR= #007700]->[/COLOR]fetch[COLOR= #007700]([/COLOR]PDO[COLOR= #007700]:[/COLOR][COLOR= #007700]:[/COLOR]FETCH_ASSOC[COLOR= #007700]))
{[/COLOR]
[COLOR= #0000BB]$returnArr[/COLOR][COLOR= #007700][] = new[/COLOR] Account[COLOR= #007700]([/COLOR][COLOR= #0000BB]$accountRow[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]],[/COLOR] [COLOR= #0000BB]$accountRow[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]username[/COLOR][COLOR= #007700]]);
}[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$returnArr[/COLOR][COLOR= #007700];
}
}[/COLOR]
[URL="http://www.php.net/class"]class[/URL] Account
[COLOR= #007700]{[/COLOR]
[URL="http://www.php.net/private"]private[/URL] [COLOR= #0000BB]$id[/COLOR][COLOR= #007700];[/COLOR]
[URL="http://www.php.net/private"]private[/URL] [COLOR= #0000BB]$username[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #FF8000]/**
* Constructor
*
* @param int $id The id of the account
* @param string $username The username of the account
*/[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] __construct[COLOR= #007700]([/COLOR][COLOR= #0000BB]$id[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$name[/COLOR][COLOR= #007700])
{[/COLOR]
[COLOR= #FF8000]// Check if id is integer[/COLOR]
[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][URL="http://www.php.net/is_numeric"]is_numeric[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$id[/COLOR][COLOR= #007700]))[/COLOR]
throw [COLOR= #007700]new[/COLOR] InvalidArgumentException[COLOR= #007700]([/COLOR][COLOR= #DD0000]Parameter $id needs to be an integer[/COLOR][COLOR= #007700]);[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]id [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$id[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]username [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$username[/COLOR][COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getId[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]id[COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/public"]public[/URL] [COLOR= #007700]function[/COLOR] getUsername[COLOR= #007700]()
{[/COLOR]
[URL="http://www.php.net/return"]return[/URL] [COLOR= #0000BB]$this[/COLOR][COLOR= #007700]->[/COLOR]username[COLOR= #007700];
}
}[/COLOR]
En hoe je het dan toepast:
[COLOR= #0000BB]<?php
$databaseConnection[/COLOR] [COLOR= #007700]= new[/COLOR] PDO[COLOR= #007700](....);[/COLOR]
[COLOR= #0000BB]$accountDAO[/COLOR] [COLOR= #007700]= new[/COLOR] AccountDAO[COLOR= #007700]([/COLOR][COLOR= #0000BB]$databaseConnection[/COLOR][COLOR= #007700]);[/COLOR]
[URL="http://www.php.net/foreach"]foreach[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$accountDAO[/COLOR][COLOR= #007700]->[/COLOR]getAllAccounts[COLOR= #007700]() as[/COLOR] [COLOR= #0000BB]$a[/COLOR][COLOR= #007700])
{[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$a[/COLOR][COLOR= #007700]->[/COLOR]getUsername[COLOR= #007700]();
}[/COLOR]
Je zorgt ervoor dat je DAOs globaal beschikbaar zijn waardoor je er in je controllers bij kan (of je gebruikt hier ook DI voor)