The PHP Class with Dynamic Functions

By | 1st May 2011

class Record {
 
  /* record information will be held in here */
  private $info;
 
  /* constructor */
  function Record($record_array) {
    $this->info = $record_array;
  }
 
  /* dynamic function server */
  function __call($method,$arguments) {
    $meth = $this->from_camel_case(substr($method,3,strlen($method)-3));
    return array_key_exists($meth,$this->info) ? $this->info[$meth] : false;
  }
 
  /* uncamelcaser: via http://www.paulferrett.com/2009/php-camel-case-functions/ */
  function from_camel_case($str) {
    $str[0] = strtolower($str[0]);
    $func = create_function(‘$c’, ‘return “_” . strtolower($c[1]);’);
    return preg_replace_callback(‘/([A-Z])/’, $func, $str);
  } 
}

The first step is to create a very primitive class with a constructor which receives the record array and a __call magic method which gets executed any time a class method is called. When a method is called we parse the method name to remove “get” and check to see if the corresponding array key exists. If the key exists, we return its value — if the key does not exist, we simple return false.

The PHP Example Usage

 /* usage */
$Record = new Record(
  array(
    ‘id’ => 12,
    ‘title’ => ‘Greatest Hits’,
    ‘description’ => ‘The greatest hits from the best band in the world!’
  )
);

/* proof it works! */
echo ‘The ID is:  ‘.$Record->getId(); // returns 12

echo ‘The Title is:  ‘.$Record->getTitle(); // returns “Greatest Hits”

echo ‘The Description is:  ‘.$Record->getDescription(); //returns “The greatest hits from the best band in the world!”

Above we pass the array to the class and are then able to retrieve values via the “get” functions. Awesome!

Category: PHP

Leave a Reply

Your email address will not be published. Required fields are marked *