162 lines
2.9 KiB
PHP
162 lines
2.9 KiB
PHP
<?php
|
|
/**
|
|
* @author Olexandr Zanichkovsky <olexandr.zanichkovsky@zophiatech.com>
|
|
* @package AST
|
|
*/
|
|
|
|
require_once dirname(__FILE__) . '/XmlImportAstStatement.php';
|
|
require_once dirname(__FILE__) . '/XmlImportAstElseif.php';
|
|
|
|
/**
|
|
* Represents an IF clause
|
|
*/
|
|
class XmlImportAstIf extends XmlImportAstStatement
|
|
{
|
|
/**
|
|
* Condition
|
|
*
|
|
* @var XmlImportAstExpression
|
|
*/
|
|
private $condition;
|
|
|
|
/**
|
|
* If body
|
|
*
|
|
* @var XmlImportAstSequence
|
|
*/
|
|
private $ifBody;
|
|
|
|
/**
|
|
* List of elseif subclauses
|
|
*
|
|
* @var array
|
|
*/
|
|
private $elseIfs = array();
|
|
|
|
/**
|
|
* Else body
|
|
*
|
|
* @var XmlImportAstSequence
|
|
*/
|
|
private $elseBody;
|
|
|
|
/**
|
|
* Creates new instance
|
|
*
|
|
* @param XmlImportAstExpression $condition
|
|
*/
|
|
public function __construct(XmlImportAstExpression $condition)
|
|
{
|
|
$this->condition = $condition;
|
|
}
|
|
|
|
/**
|
|
* Gets condition
|
|
*
|
|
* @return XmlImportAstExpression
|
|
*/
|
|
public function getCondition()
|
|
{
|
|
return $this->condition;
|
|
}
|
|
|
|
/**
|
|
* Gets if body
|
|
*
|
|
* @return XmlImportAstSequence
|
|
*/
|
|
public function getIfBody()
|
|
{
|
|
return $this->ifBody;
|
|
}
|
|
|
|
/**
|
|
* Adds If body
|
|
*
|
|
* @param XmlImportAstSequence $body
|
|
*/
|
|
public function addIfBody(XmlImportAstSequence $body)
|
|
{
|
|
$this->ifBody = $body;
|
|
}
|
|
|
|
/**
|
|
* Gets list of elseif subcloses
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getElseIfs()
|
|
{
|
|
return $this->elseIfs;
|
|
}
|
|
|
|
/**
|
|
* Gets else body
|
|
*
|
|
* @return XmlImportAstSequence
|
|
*/
|
|
public function getElseBody()
|
|
{
|
|
return $this->elseBody;
|
|
}
|
|
|
|
/**
|
|
* Adds else body
|
|
*
|
|
* @param XmlImportAstSequence $body
|
|
*/
|
|
public function addElseBody(XmlImportAstSequence $body)
|
|
{
|
|
$this->elseBody = $body;
|
|
}
|
|
|
|
/**
|
|
* Adds elseif subclause
|
|
*
|
|
* @param XmlImportAstElseif $elseif
|
|
*/
|
|
public function addElseif(XmlImportAstElseif $elseif)
|
|
{
|
|
$this->elseIfs[] = $elseif;
|
|
}
|
|
|
|
/**
|
|
* String represetation of an IF clause
|
|
*
|
|
* @return string
|
|
*/
|
|
public function __toString()
|
|
{
|
|
$result = "--> begin " . get_class($this) . "\n";
|
|
$result .= ' Condition: ' . $this->condition . "\n";
|
|
$result .= " Body:\n";
|
|
$array = explode("\n", $this->ifBody);
|
|
for ($i = 0; $i < count($array); $i++)
|
|
{
|
|
$array[$i] = ' ' . $array[$i];
|
|
}
|
|
$result .= implode("\n", $array) . "\n";
|
|
foreach($this->elseIfs as $elseIf)
|
|
{
|
|
$array = explode("\n", $elseIf);
|
|
for ($i = 0; $i < count($array); $i++)
|
|
{
|
|
$array[$i] = '' . $array[$i];
|
|
}
|
|
$result .= implode("\n", $array) . "\n";
|
|
}
|
|
if (!is_null($this->elseBody))
|
|
{
|
|
$result .= " Else:\n";
|
|
$array = explode("\n", $this->elseBody);
|
|
for ($i = 0; $i < count($array); $i++)
|
|
{
|
|
$array[$i] = ' ' . $array[$i];
|
|
}
|
|
$result .= implode("\n", $array) . "\n";
|
|
}
|
|
$result .= "--> end " . get_class($this) . "\n";
|
|
return $result;
|
|
}
|
|
}
|