<?php
/**
* オブジェクトクラス
*
* PHP version 5
*
* @package    base
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class Object
{
	static $id_counter = 0;

	private $_id;

	/*
	 *	コンストラクタ
	 */
	public function __construct()
	{
		$id = ++ self::$id_counter;
		$this->_id = $id;
	}

	/*
	 *	ハッシュコード
	 */
	public function hashCode()
	{
		return $this->_id;
	}

	/*
	 *	比較
	 */
	public function equals( Object $object )
	{
		return $this->_id === $object->_id;
	}

	/**
	 * プロパティを持っているか
	 */
	public function hasProperty( String $property_name )
	{
		return property_exists( $this, $property_name );
	}

	/**
	 * プロパティ一覧を取得
	 */
	public function getPropertyList()
	{
		return new HashMap( get_object_vars($this) );
	}

	/**
	 * プロパティ値を取得
	 */
	public function getProperty( String $property_name, $default_value = NULL )
	{
		return property_exists( $this, $property_name ) ? $this->$property_name : $default_value;
	}

	/**
	 * プロパティ値を設定
	 */
	public function setProperty( String $property_name, $value )
	{
		if ( property_exists( $this, $property_name ) ){
			$this->$property_name  = $value;
		}
	}

	/*
	 *	文字列化
	 */
	public function toString()
	{
		return get_class($this) . '@' . $this->_id;
	}

	/**
	 * instanceof判定
	 */
	public function isInstanceOf( String $class_name )
	{
		$class_name = "$class_name";
		return $this instanceof $class_name;
	}

	/*
	 *	文字列化
	 */
	public function __toString()
	{
		return $this->toString();
	}
}
return __FILE__;
