fenom/docs/ru/operators.md

6.5 KiB
Raw Blame History

Операторы

Арифметические операторы

Все же помнят арифметику?

  • -$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? - returns TRUE if $a is not empty
  • $a! - returns TRUE 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 of MyClass 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]}