/** * @version $Id: object.php 10707 2008-08-21 09:52:47Z eddieajau $ * @package Joomla.Framework * @subpackage Base * @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ /** * Object class, allowing __construct in PHP4. * * @package Joomla.Framework * @subpackage Base * @since 1.5 */ class JObject { /** * An array of errors * * @var array of error messages or JExceptions objects * @access protected * @since 1.0 */ var $_errors = array(); /** * A hack to support __construct() on PHP 4 * * Hint: descendant classes have no PHP4 class_name() constructors, * so this constructor gets called first and calls the top-layer __construct() * which (if present) should call parent::__construct() * * @access public * @return Object * @since 1.5 */ function JObject() { $args = func_get_args(); call_user_func_array(array(&$this, '__construct'), $args); } /** * Class constructor, overridden in descendant classes. * * @access protected * @since 1.5 */ function __construct() {} /** * Returns a property of the object or the default value if the property is not set. * * @access public * @param string $property The name of the property * @param mixed $default The default value * @return mixed The value of the property * @see getProperties() * @since 1.5 */ function get($property, $default=null) { if(isset($this->$property)) { return $this->$property; } return $default; } /** * Returns an associative array of object properties * * @access public * @param boolean $public If true, returns only the public properties * @return array * @see get() * @since 1.5 */ function getProperties( $public = true ) { $vars = get_object_vars($this); if($public) { foreach ($vars as $key => $value) { if ('_' == substr($key, 0, 1)) { unset($vars[$key]); } } } return $vars; } /** * Get the most recent error message * * @param integer $i Option error index * @param boolean $toString Indicates if JError objects should return their error message * @return string Error message * @access public * @since 1.5 */ function getError($i = null, $toString = true ) { // Find the error if ( $i === null) { // Default, return the last message $error = end($this->_errors); } else if ( ! array_key_exists($i, $this->_errors) ) { // If $i has been specified but does not exist, return false return false; } else { $error = $this->_errors[$i]; } // Check if only the string is requested if ( JError::isError($error) && $toString ) { return $error->toString(); } return $error; } /** * Return all errors, if any * * @access public * @return array Array of error messages or JErrors * @since 1.5 */ function getErrors() { return $this->_errors; } /** * Modifies a property of the object, creating it if it does not already exist. * * @access public * @param string $property The name of the property * @param mixed $value The value of the property to set * @return mixed Previous value of the property * @see setProperties() * @since 1.5 */ function set( $property, $value = null ) { $previous = isset($this->$property) ? $this->$property : null; $this->$property = $value; return $previous; } /** * Set the object properties based on a named array/hash * * @access protected * @param $array mixed Either and associative array or another object * @return boolean * @see set() * @since 1.5 */ function setProperties( $properties ) { $properties = (array) $properties; //cast to an array if (is_array($properties)) { foreach ($properties as $k => $v) { $this->$k = $v; } return true; } return false; } /** * Add an error message * * @param string $error Error message * @access public * @since 1.0 */ function setError($error) { array_push($this->_errors, $error); } /** * Object-to-string conversion. * Each class can override it as necessary. * * @access public * @return string This name of this class * @since 1.5 */ function toString() { return get_class($this); } /** * Legacy Method, use {@link JObject::getProperties()} instead * * @deprecated as of 1.5 * @since 1.0 */ function getPublicProperties() { return $this->getProperties(); } }