6.5 KiB
6.5 KiB
Операторы
Арифметические операторы
Все же помнят арифметику?
-$a
- отрицание знака, смена знака$a
.$a + $b
- сложение, сумма$a
и$b
.$a - $b
- вычитаение, разность$a
и$b
.$a * $b
- умножение, произведение$a
и$b
.$a / $b
- деление, частное от деления$a
на$b
.$a % $b
- деление по модулю, целочисленный остаток от деления$a
на$b
.
{$a + $b * $c/$d - $e*5 + 1e3}
Логические операторы
$a || $b
- логичесое ИЛИ$a && $b
- лигическое И!$a
- отрицание, унарный оператор$a or $b
- логическое ИЛИ$a and $b
- логическое И$a xor $b
- xor, логическое сложение
{if $b && $c} ... {/if}
Операторы сравнения
$a < $b
- строгое неравество,$a
меньше$b
$a > $b
- строгое неравество,$a
больше$b
$a <= $b
- не строгое не равество,$a
меньше или равно$b
$a >= $b
- не строгое не равество,$a
больше или равно$b
$a == $b
- Равно,$a
равно$b
$a === $b
- Тождественно равно,$a
иденично$b
. Отличается от равества тем что проверяет так же тип значений; если '0' == 0 — истина, то уже '0' === 0 — ложно.$a !== $b
- не иденично,$a
отличается от$b
$a != $b
- неравенство,$a
отличается от$b
$a <> $b
- неравенство
{if $b >= 5} ... {/if}
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа.
Преобразование типов не происходит при использовании ===
или !==
так как в этом случае кроме самих значений сравниваются еще и типы.
Побитовые операторы
Побитовые операторы позволяют считывать и устанавливать конкретные биты целых чисел.
$a | $b
- битовое ИЛИ, устанавливаются те биты, которые установлены в$a
или в$b
.$a & $b
- битовое И, устанавливаются только те биты, которые установлены и в$a
, и в$b
.$a ^ $b
- битовое исключающее ИЛИ, устанавливаются только те биты, которые установлены либо только в$a
, либо только в$b
, но не в обоих одновременно.~$a
- битовое отрицание, устанавливаются те биты, которые не установлены в$a
, и наоборот.$a << $b
- битовый сдвиг влево, все биты переменной$a
сдвигаются на$b
позиций влево (каждая позиция подразумевает "умножение на 2")$a >> $b
- битовый сдвиг вправо, все биты переменной$a
сдвигаются на$b
позиций вправо (каждая позиция подразумевает "деление на 2")
{if $a & 1} {var $b = 4 | $flags} {/if}
Assignment Operators
$a = $b
- assignment$a += $b
- assignment with addition$a -= $b
- assignment with subtraction$a *= $b
- assignment with multiplication$a /= $b
- assignment with division$a %= $b
- assignment with modulus$a &= $b
- assignment with bitwise And$a |= $b
- assignment with bitwise or$a ^= $b
- assignment with bitwise xor$a <<= $b
- assignment with left shift$a >>= $b
- assignment with right shift
{var $b |= $flags}
Incrementing/Decrementing operators
++$a
- increment the variable and use it$a++
- use the variable and increment it--$a
- decrement the variable and use it$a--
- use the variable and decrement it
String operator
$a ~ $b
- return concatenation of variables$a
and$b
Ternary operators
$a ? $b : $c
- returns$b
if$a
is not empty, and$c
otherwise$a ! $b : $c
- returns$b
if$a
is set, and$c
otherwise$a ?: $c
- returns$a
if$a
is not empty, and$c
otherwise$a !: $c
- returns$a
if$a
is set, and$c
otherwise
{var $a = true}
{$a ? 5 : 10} {* outputs 5 *}
{var $a = false}
{$a ? 5 : 10} {* outputs 10 *}
Check operators
$a?
- returnsTRUE
if$a
is not empty$a!
- returnsTRUE
if$a
is set
{if $a?} {* instead of {if !empty($a)} *}
{if $a!} {* instead of {if isset($a)} *}
{$a?:"some text"} {* instead of {if empty($a) ? "some text" : $a} *}
{$a!:"some text"} {* instead of {if isset($a) ? $a : "some text"} *}
Test operator
Tests can be negated by using the is not
operator.
$a is $b
- $a identical $b$a is integer
- test variable type. Type may be int/integer, bool/boolean, float/double/decimal, array, object, scalar, string, callback/callable, number/numeric.$a is iterable
- test variable for iteration.$a is template
- variable$a
contain existing template name.$a is empty
- checks if a variable is empty.$a is set
- checks if a variable is set.$a is even
- variable$a
is even.$a is odd
- variable$a
is odd.$a is MyClass
or$a is \MyClass
- variable$a
instance ofMyClass
class
Containment operator
Tests can be negated by using the not in
operator.
$a in $b
- variable$a
contains in$b
, $b may be string, plain or assoc array.$a in list $b
- variable$a
contains in array$b
as value$a in keys $b
- array$b
contain key$a
$a in string $b
- variable$a
contains in string$b
as substring
{'df' in 'abcdefg'}
{5 in [1, 5, 25, 125]}
{99 in keys [1, 5, 25, 99 => 125]}