blob: 08e59b2e4b924daad7a86f3f9d4751f963473d3c [file] [log] [blame]
<?php
/**
* File containing the ezcTemplateOperatorAstNode class
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Template
* @version //autogen//
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @access private
*/
/**
* Represents PHP builtin types.
*
* Creating the type is done by simply passing the type to the constructor
* which will take care of storing it and exporting it to PHP code later on.
* The following types can be added:
* - integer
* - float
* - boolean
* - null
* - string
* - array
* - objects
*
* The following types are not supported:
* - resource
*
* Note: Objects will have to implement the __set_state magic method to be
* properly exported.
*
* <code>
* $tInt = new ezcTemplateOperatorAstNode( 5 );
* $tFloat = new ezcTemplateOperatorAstNode( 5.2 );
* $tString = new ezcTemplateOperatorAstNode( "a simple string" );
* </code>
*
* @package Template
* @version //autogen//
* @access private
*/
abstract class ezcTemplateOperatorAstNode extends ezcTemplateParameterizedAstNode
{
/**
* Constant for the number of parameters of unary operators, ie. 1.
*/
const OPERATOR_TYPE_UNARY = 1;
/**
* Constant for the number of parameters of binary operators, ie. 2.
*/
const OPERATOR_TYPE_BINARY = 2;
/**
* Constant for the number of parameters of ternary operators, ie. 3.
*/
const OPERATOR_TYPE_TERNARY = 3;
/**
* Controls how unary operators are handled.
* If true the operator is placed infront of the operand, if false it is
* placed after the operand.
*/
public $preOperator;
/**
* Constructs a new ezcTemplateOperatorAstNode
*
* @param int $parameterCount The number of parameters the operator must have.
* @param bool $preOperator Controls whether unary operators are placed before or after operand.
*/
public function __construct( $parameterCount, $preOperator = false )
{
parent::__construct( $parameterCount, $parameterCount );
$this->preOperator = $preOperator;
}
/**
* Returns the parameters of the operator.
*
* Note: The values returned from this method must never be modified.
* @return array(ezcTemplateAstNode)
*/
public function getParameters()
{
return $this->parameters;
}
/**
* Checks if the visitor object is accepted and if so calls the appropriate
* visitor method in it.
*
* Calls visitUnaryOperator if it has one parameter, visitBinaryOperator() if it has two and visitTernaryOperator() if it has three.
* All part of the ezcTemplateBasicAstNodeVisitor interface.
*
* @param ezcTemplateAstNodeVisitor $visitor
* @return ezcTemplateAstNode
*/
public function accept( ezcTemplateAstNodeVisitor $visitor )
{
$count = count( $this->parameters );
if ( $count == 1 )
{
$visitor->visitUnaryOperatorAstNode( $this );
}
else if ( $count == 2 )
{
$visitor->visitBinaryOperatorAstNode( $this );
}
else if ( $count == 3 )
{
$visitor->visitTernaryOperatorAstNode( $this );
}
else
{
throw new ezcTemplateInternalException( "Operator can only have 1, 2 or 3 operands but this has {$count}" );
}
}
/**
* Returns a text string representing the PHP operator.
*
* @return string
*/
abstract public function getOperatorPHPSymbol();
}
?>