<?phpclass userController extends Controller{ public function __construct () { parent::__construct(); } public function addUser () { $user = new User (); // instantiated using __autoload. $user -> set ( 'firstName', 'Berry' ); $user -> set ( 'lastName', 'Langerak' ); $user -> save (); } public function listUsers () { $users = UserMapper::Get ( array ( 'firstName' => '= Berry' ) ); $view = new HTMLView ( 'userList' ); $view -> appendModels ( 'users', $users ); return $view; }}class userMapper implements iMapper{ public function __construct (); { parent::__construct (); } public function Get ( $criteria ) { /** * De onderliggende mapper gaat dan vervolgens * kijken welke velden er in de database zitten, * en retourneerd de records die voldoen aan de * criteria. **/ return parent::Get ( 'users', $criteria ); } /** * Ten opzichte van.. **/ public function Get ( $criteria ) { $query = "SELECT firstName, lastName FROM users"; /** * Geen zin om dit uit te schrijven, daarom zo. In * dit voorbeeld zou het nog werken ook. **/ foreach ( $criteria AS $field => $criterium ) { $where = ( !isset ( $where ) ) ? ' WHERE ' : ''; $where .= $field . ' ' . $criterium . ' '; } $res = mysql_query ( $query ); while ( $current = mysql_fetch_assoc ( $res ) ) { $users[] = array ( $current['firstName'], $current['lastName'] ); } return $users; } public function set ( $varName, $value ) { if ( isset ( $this -> $varName ) ) { $this -> $varName = mysql_real_escape_string ( $value ); } } public function save () { /** * De save van de parent (model) detecteerd middels * Reflection de velden die hij op moet slaan. **/ $this -> userId = parent::save (); } public function save () { /** * Is dit dan zoals jij het zou doen? **/ $query = "INSERT INTO users ( firstName, lastName ) VALUES ( %s, %s );"; if ( !mysql_query ( sprintf ( $query, $this -> firstName, $this -> lastName ) ) ) { throw new databaseException (); } else { $this -> userId = mysql_insert_id (); } }}?>