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

abstract class HTMLObject
{
	protected $_tag;
	protected $_attributes;

	/*
	 *	コンストラクタ
	 */
	public function __construct( $tag, $attributes )
	{
		$this->_tag          = $tag;
		$this->_attributes   = $attributes;
	}

	/*
	 *	HTML出力
	 */
	abstract public function toHTML();

	/*
	 *	属性取得
	 */
	public function getAttribute( $attr_name )
	{
		if ( !$this->_attributes || !isset($this->_attributes[$attr_name]) ){
			return NULL;
		}
		return $this->_attributes[ $atr_name ];
	}

	/*
	 *	開始タグ出力
	 */
	public function startTag()
	{
		$conv = EncodingConverter::fromString( 'PHP_TO_HTML' );

		$tag = $this->_tag;
		$html = '<'. $tag;

		// 属性
		$attributes = $this->_attributes;
		if ( $attributes ){
			foreach( $attributes as $name => $value ){
				if ( $name && $value !== NULL ){
					$value = $conv->convertEncoding( $value );
					$html .= ' ' . $name . '="' . $value . '"';
				}
			}
		}
		$html .= '>';

		return $html;
	}

	/*
	 *	終了タグ出力
	 */
	public function endTag()
	{
		return '</' . $this->_tag . '>';
	}

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