Skip to content
Snippets Groups Projects
base.php 1.75 KiB
Newer Older
Taddeus Kroes's avatar
Taddeus Kroes committed
<?php
/**
 * Commonly used classes used in the BasicWeb package.
Taddeus Kroes's avatar
Taddeus Kroes committed
 * 
 * @author Taddeus Kroes
 * @version 1.0
 * @date 13-07-2012
 */

namespace BasicWeb;
Taddeus Kroes's avatar
Taddeus Kroes committed

require_once 'logger.php';

/**
 * Base class for instantiable classes in the BasicWeb package.
Taddeus Kroes's avatar
Taddeus Kroes committed
 * 
 * The base class defines a static 'create' method that acts as a chainable
 * shortcut for the class constructor.
 * 
 * @package BasicWeb
Taddeus Kroes's avatar
Taddeus Kroes committed
 */
abstract class Base {
	/**
	 * Create a new object of the called class.
	 * 
	 * This function provides a chainable constructor, which is not possible
	 * using plain PHP code.
	 * 
	 * @returns mixed
	 */
	final static function create(/* [ arg0 [ , ... ] ] */) {
		$args = func_get_args();
		$class = get_called_class();
		$rc = new \ReflectionClass($class);
		
		return $rc->newInstanceArgs($args);
	}
}

/**
 * Exception, thrown when a required file does not exist.
 * 
 * @package BasicWeb
Taddeus Kroes's avatar
Taddeus Kroes committed
 */
class FileNotFoundError extends \RuntimeException {
	/**
	 * Create a new FileNotFoundError instance.
	 * 
	 * Sets an error message of the form 'File "path/to/file.php" does not exist.'.
	 * 
	 * @param string $path Path to the file that does not exist.
	 */
	function __construct($path) {
		$this->message = sprintf('File "%s" does not exist.', $path);
	}
}

/**
Taddeus Kroes's avatar
Taddeus Kroes committed
 * Format a string using parameters in an associative array.
 * 
 * <code>
 * echo asprintf('foo %(bar)', array('bar' => 'baz'));  // prints 'foo baz'
 * </code>
Taddeus Kroes's avatar
Taddeus Kroes committed
 * 
 * @param string $format The string to format.
Taddeus Kroes's avatar
Taddeus Kroes committed
 * @param array $params An associative array with parameters that are used in $format.
 * @package BasicWeb
Taddeus Kroes's avatar
Taddeus Kroes committed
 */
function asprintf($format, array $params) {
	return preg_replace_callback(
		'/%\(([a-z-_ ]*)\)/i',
		function ($matches) use ($params) {
			return (string)$params[$matches[1]];
		},
		$format
	);
}

?>