PHP DevCenter
oreilly.comSafari Books Online.Conferences.

advertisement


Implementing MVC in PHP: The Model

by Joe Stump
03/02/2006

This article series (starting with Understanding MVC in PHP and continued in Implementing MVC in PHP: The Controller and Implementing MVC in PHP: The View) demonstrates how to build an MVC web framework using PHP 5. This article explains the Model part of Model-View-Controller design.

The Model is where the majority of the application's logic sits. It is where you run queries against the database and perform calculations on input. A good example of what a Model would look like is a simple login script. The login script gets user input from a form, validates it against the database, and then logs in the user.

The first application using the newly created framework will be the users module. I will be creating three Models:

  • login.php validates input from a form against the database
  • logout.php logs a user out and destroys the associated session
  • whoami.php displays simple user information, similar to the Unix program of the same name

Because I am introducing the idea of sessions and users into the framework, I will need to create a few more foundation classes as well as a table in a database. Before I go over the code of login.php, I'd like to walk through these classes.

FR_Session

FR_Session is a wrapper for the built-in PHP sessions. The code isn't very involved and provides only basic support for starting, destroying, and writing sessions.

<?php

  /**
  * FR_Session
  *
  * @author Joe Stump <joe@joestump.net>
  * @copyright Joe Stump <joe@joestump.net>
  * @license http://www.opensource.org/licenses/gpl-license.php
  * @package Framework
  * @filesource
  */

  /**
  * FR_Session
  *
  * Our base session class as a singleton. Handles creating the session, 
  * writing to the session variable (via overloading) and destroying the
  * session.
  *
  * @author Joe Stump <joe@joestump.net>
  * @package Framework
  */
  class FR_Session 
  {
      /**
      * $instance
      *
      * Instance variable used for singleton pattern. Stores a single instance
      * of FR_Session.
      *
      * @author Joe Stump <joe@joestump.net>
      * @var mixed $instance
      */
      private static $instance;

      /**
      * $sessionID
      *
      * The session ID assigned by PHP (usually a 32 character alpha-numeric
      * string).
      *
      * @author Joe Stump <joe@joestump.net>
      * @var string $sessionID
      */
      public static $sessionID;

      // {{{ __construct()
      /**
      * __construct
      *
      * Starts the session and sets the sessionID for the class.
      *
      * @author Joe Stump <joe@joestump.net>
      */
      private function __construct()
      {
          session_start();
          self::$sessionID = session_id();
      }
      // }}}
      // {{{ singleton()
      /**
      * singleton
      * 
      * Implementation of the singleton pattern. Returns a sincle instance
      * of the session class.
      * 
      * @author Joe Stump <joe@joestump.net>
      * @return mixed Instance of session
      */
      public static function singleton()
      {
          if (!isset(self::$instance)) {
              $className = __CLASS__;
              self::$instance = new $className;
          }

          return self::$instance;
      }
      // }}}
      // {{{ destroy()
      public function destroy()
      {
          foreach ($_SESSION as $var => $val) {
              $_SESSION[$var] = null;
          }

          session_destroy();
      }
      // }}}
      // {{{ __clone()
      /**
      * __clone
      *
      * Disable PHP5's cloning method for session so people can't make copies
      * of the session instance.
      * 
      * @author Joe Stump <joe@joestump.net>
      */
      public function __clone()
      {
          trigger_error('Clone is not allowed for '.__CLASS__,E_USER_ERROR);
      }
      // }}}
      // {{{ __get($var)
      /**
      * __get($var)
      *
      * Returns the requested session variable.
      *
      * @author Joe Stump <joe@joestump.net>
      * @return mixed
      * @see FR_Session::__get()
      */
      public function __get($var)
      {
          return $_SESSION[$var];
      }
      // }}}
      // {{{ __set($var,$val)
      /**
      * __set 
      * 
      * Using PHP5's overloading for setting and getting variables we can
      * use $session->var = $val and have it stored in the $_SESSION 
      * variable. To set an email address, for instance you would do the
      * following:
      *
      * <code>
      * $session->email = 'user@example.com';
      * </code>
      *
      * This doesn't actually store 'user@example.com' into $session->email,
      * rather it is stored in $_SESSION['email'].
      * 
      * @author Joe Stump <joe@joestump.net>
      * @param string $var
      * @param mixed $val
      * @see FR_Session::__get()
      * @link http://us3.php.net/manual/en/language.oop5.overloading.php
      */
      public function __set($var,$val)
      {
          return ($_SESSION[$var] = $val);
      }
      // }}}
      // {{{ __destruct()
      /**
      * __destruct()
      *
      * Writes the current session.
      *
      * @author Joe Stump <joe@joestump.net> 
      */
      public function __destruct()
      {
          session_write_close();
      }
      // }}}
  }

?>

Pages: 1, 2, 3, 4

Next Pagearrow




Valuable Online Certification Training

Online Certification for Your Career
Earn a Certificate for Professional Development from the University of Illinois Office of Continuing Education upon completion of each online certificate program.

PHP/SQL Programming Certificate — The PHP/SQL Programming Certificate series is comprised of four courses covering beginning to advanced PHP programming, beginning to advanced database programming using the SQL language, database theory, and integrated Web 2.0 programming using PHP and SQL on the Unix/Linux mySQL platform.

Enroll today!


Sponsored by: