所有的组件都继承自abatractcomponent这个类,并实现其中的tostring()和render()方法。abatractcomponent又有三个主要的子类,一个是容器类continer,其又派生出panel、poppanel和grouppanel等类,第二个是控件类control,是所有可视控件类的父类,如button、linkbutton等类,第三个则是列表类list,实现有列表,名-值对的ui。
abstractcomponent部分代码:
复制代码 代码如下:
_style = array_merge($this->_style, $options[style]);
}
unset($options[style]);
}
$this->_attributes = array_merge($this->_attributes, $options);
}
if (!empty($style) && is_array($style)) {
$this->_style = array_merge($this->_style, $style);
}
}
/**
* set the component attributes
*
* @access protected
*
* @param $name attribute name
* @param $value attribute value, option
*
* @return abstractcomponent
*/
protected function setattr($name, $value) {
if (array_key_exists($name, $this->_attributes)) {
unset($this->_attributes[$name]);
}
$this->_attributes[$name] = $value;
return $this;
}
/**
* get the component attributes' value
*
* @access protected
*
* @param $name attribute name
*
* @return string
*/
protected function getattr($name) {
return array_key_exists($name, $this->_attributes) ? $this->_attributes[$name] : null;
}
/**
* set the component style
*
* @access protected
*
* @param $name style name
* @param $value style value, option
*
* @return abstractcomponent
*/
protected function setstyle($name, $value) {
if (array_key_exists($name, $this->_style)) {
unset($this->_style[$name]);
}
$this->_style[$name] = $value;
return $this;
}
/**
* get the component style's value
*
* @access protected
*
* @param $name attribute name
*
* @return string
*/
protected function getstyle($name) {
return array_key_exists($name, $this->_style) ? $this->_style[$name] : null;
}
/**
* convert the component all attributes to string like name = value
*
* @access protected
*
* @return string
*/
protected function attributetostring() {
//$s = array_reduce(;
$s = ;
foreach($this->_attributes as $key => $value) {
$s .= $key=\$value\ ;
}
return $s;
}
/**
* convert the component style to string like style = .....
*
* @access protected
*
* @return string
*/
protected function styletostring() {
if (empty($this->_style)) return ;
$s = ;
foreach($this->_style as $key => $value) {
$s .= $key: $value; ;
}
$s = style=\$s\ ;
return $s;
}
/**
* set or get the component attributes
*
* @access public
*
* @param $name attribute name
* @param $value attribute value, option
*
* @return string || abstractcomponent
*/
public function attr() {
$name = func_get_arg(0);
if (func_num_args() == 1) {
return $this->getattr($name);
}
else if (func_num_args() == 2) {
$value = func_get_arg(1);
return $this->setattr($name, $value);
}
}
/**
* set or get the component style
*
* @access public
*
* @param $name style name
* @param $value style value, option
*
* @return string || abstractcomponent
*/
public function style() {
$name = func_get_arg(0);
if (func_num_args() == 1) {
return $this->getstyle($name);
}
else if (func_num_args() == 2) {
$value = func_get_arg(1);
return $this->setstyle($name, $value);
}
}
/**
* return the html string
*
* @access public
*
* @return string
**/
public function tostring() {
thorw new abstractexception(subclass must be override this method!!);
}
/**
* render the component
*
* @access public
*
* @return void
**/
public function render() {
echo $this->tostring();
}
}
http://www.bkjia.com/phpjc/320251.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/320251.htmltecharticle但其在ui方便却有些力不从心,不仅是php,任何一种web编程语言在设计ui都有类似的问题,宿主语言与html混和在一个文件中,大量重复的...
