SplitParamsStr($params_str);
}
/**
* Splits tag params into associative array
*
* @param string $params_str
* @access private
*/
function SplitParamsStr($params_str)
{
preg_match_all("/([a-zA-Z0-9_.]+)=([\"']{1,1})(.*?)(? $val){
$values[$val[1]] = str_replace('\\' . $val[2], $val[2], $val[3]);
}
$this->AddParams($values);
}
/**
* Sets new parameter value
*
* @param string $name
* @param string $val
* @access public
*/
function Set($name, $val)
{
//echo "sessing params: [$name] = [$val] (class: ".get_class($this).")
";
$this->_Params[strtolower($name)] = $val;
}
/**
* Removes parameter
*
* @param string $name
* @access public
*/
function Remove($name)
{
unset($this->_Params[$name]);
}
/**
* Gets parameter value by parameter name
*
* @param string $name
* @param int $mode
* @return string
* @access public
*/
function Get($name, $mode=FALSE_ON_NULL)
{
// echo " name : '$name' || mode : $mode
";
$name = strtolower($name);
if (array_key_exists($name, $this->_Params))
return $this->_Params[$name];
else
return $mode == FALSE_ON_NULL ? false : '';
}
/**
* Mass parameter setting from hash
*
* @param Array $params
* @access public
*/
function AddParams($params)
{
if (!is_array($params)) return;
/*if (count($this->_Params) == 0) {
$this->_Params = $params;
}
else {*/
foreach ($params as $name => $val)
$this->Set(strtolower($name), $val);
//}
}
/**
* Return all paramters as hash
*
* @return Array
* @access public
*/
function GetParams()
{
return $this->_Params;
}
}
/*class RefParams extends Params {
function Set($name, &$val)
{
$this->_Params[$name] =& $val;
}
function &Get($name)
{
if (isset($this->_Params[$name]))
return $this->_Params[$name];
else
return false;
}
}*/
// ################### TESTS ############################
global $suite;
if (isset($suite)) {
class TestParams extends TestCase {
function testParamsOperations()
{
$params =& new Params();
$params->Set('test_var', 24);
$this->AssertEquals(24, $params->Get('test_var'));
$this->AssertFalse($params->Get('none_existant_param'));
$res = $params->GetParams();
$this->AssertEquals(24, $res['test_var']);
}
function testSplitParams()
{
$params =& new Params('test_param="abc" another_param="7"');
$this->AssertEquals('abc', $params->Get('test_param'));
$this->AssertEquals('7', $params->Get('another_param'));
}
}
$suite->addTest(new TestSuite("TestParams"));
}
/*
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
//echo "Usec: $usec, sec: $sec
";
return ((float)$usec + (float)$sec);
}
$total = 0;
$params =& new MyParams();
$param_str = "param1=\"1\" param2='atessafa \'sdf'
params3=\"asd ' \\\"f\"";
$param_str = "m:test escape1='-\"-' \t\t \n \t\n escape2=\"+\\\"+\" \n escape3='*\'*' escape4='=\='";
//3852
for ($i=0; $i<1; $i++)
{
$start = getmicrotime();
$params->SplitParamsStr($param_str);
$end = getmicrotime();
$total += $end-$start;
}
printf ("total: %.8f; average: %.8f
", $total, $total/100);
*/
?>