phalconのvoltエンジンのビルトインで色々判定

## 概要

phalconでのvoltエンジンで配列判定ってどうやってやるのかなぁと色々調べたが,なかなかやろうとしていることが実現できるものにたどり着けなかったのでメモ

## 一覧

|ビルトイン|説明| 
|:--:|:--:|
| defined |変数が定義されているかどうかをチェック|
| empty |変数が空かどうかチェック|
| even |変数が数字の偶数かどうかをチェック|
| odd |変数が数字の奇数かどうかをチェック|
| numeric |変数が数字かどうかをチェック|
| scalar |変数がスカラー(配列やオブジェクト以外)かどうかをチェック|
| iterable |イテレータかどうかをチェック|
| divisibleby |指定した数字で割り切れるかどうかをチェック|
| sameas |変数がもうひとつの変数と同じかどうか（型のチェック含む）をチェック|
| type |変数が指定された型かどうかをチェック|

### define
- 変数が定義されているかどうかをチェック。
  - phpでいう`isset`
- 定義されて入ればtrueを返す。

#### 例(true)

```php
#hogeが定義されている
{% set hoge = "hoge" %}
{% if hoge is defined %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeを定義していない
{% if hoge is defined %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### empty
- 変数が空かどうかチェック。
  - phpでいう`empty`
- 変数の中身が空(未定義, 空文字, NULL, 0)の場合、trueを返す
    - 詳しくはこちらの[PHP 型の比較表](http://php.net/manual/ja/types.comparisons.php)を見て下さい

#### 例(true)

```php
#hogeの中身が空文字
{% set hoge = "" %}
{% if hoge is empty %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身に文字が入ってる
{% set hoge = "hogehoge" %}
{% if hoge is empty %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### even
- 変数が数字の偶数かどうかをチェック。
- 偶数ならtrueを返す。
    - **※0もtrue**

#### 例(true)

```php
#hogeの中身が偶数
{% set hoge = 2 %}
{% if hoge is even %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身が奇数
{% set hoge = 1 %}
{% if hoge is even %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### odd
- 変数が数字の奇数かどうかをチェック。
- 奇数ならtrueを返す。
    - **※0はfalse**

#### 例(true)

```php
#hogeの中身が奇数
{% set hoge = 1 %}
{% if hoge is odd %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身が偶数
{% set hoge = 2 %}
{% if hoge is odd %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### numeric
- 変数が数字かどうかをチェック。
    - phpでいう`is_numeric`
- 数字ならtrueを返す。
    - **※"1"とかもtrue**

#### 例(true)

```php
#hogeの中身が数字
{% set hoge = 1 %}
{% if hoge is numeric %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身が数字以外
{% set hoge = "hoge" %}
{% if hoge is numeric %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### scalar
- 変数がスカラー(配列やオブジェクト以外)かどうかをチェック。
    - phpでいう`is_scalar`
- スカラーならtrue、配列やオブジェクトならfalseを返す。
    - **※スカラー: 大小を比較して順番に並べることが可能なもの。数値型、文字型など**

#### 例(true)

```php
#hogeの中身が数値
{% set hoge = 1 %}
{% if hoge is scalar %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身が配列
{% set hoge = ["hoge"] %}
{% if hoge is scalar %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### iterable
- イテレータかどうかをチェック。
    - **※ループで使用することができる変数かどうかのチェックになります。**
    - phpでいう`is_array`
- 配列ならtureを返す。
    - **※配列やそれに類似するデータ構造のもの**

#### 例(true)

```php
#hogeの中身が配列
{% set hoge = ["hoge", "fuga"] %}
{% if hoge is iterable %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身が文字列
{% set hoge = "hoge" %}
{% if hoge is iterable %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### divisibleby
- 指定した数字で割り切れるかどうかをチェック。
- 割り切れればtrueを返す。

#### 例(true)

```php
#hogeの中身の値が指定した数値で割り切れる
{% set hoge = 2 %}
{% if hoge is divisibleby(2) %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身の値が指定した数値で割り切れない
{% set hoge = "hoge" %}
{% if hoge is divisibleby(3) %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### sameas
- 変数がもうひとつの変数(直接指定もOK)と同じかどうか（型のチェック含む）をチェックする
- 変数の中身が型を含めて同じならtrue

#### 例(true)

```php
#hogeとfugaが型を含め同じ中身
{% set hoge = 2 %}
{% set fuga = 2 %}
#直接指定する場合はsameas(2)
{% if hoge is sameas(fuga) %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeとfugaの中身が違う
{% set hoge = 2 %}
{% set fuga = "2" %}
#直接指定する場合はsameas("2")
{% if hoge is sameas(fuga) %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

### type
- 変数が指定された型かどうかをチェック。
- 指定した型と一致すればtrue

#### 例(true)

```php
#hogeの中身の型が指定した型と一致
{% set hoge = 2 %}
{% if hoge is type('int') %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

#### 例(false)

```php
#hogeの中身の型が指定した型と一致しない
{% set hoge = 2 %}
{% if hoge is type('string') %}
  {{ "true" }}
{% else %}
  {{ "false" }}
{% endif %}
```

## 参考資料
[phalconのview(voltエンジン) vol2](https://floatingweed.com/volt%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3vol2/)

↑めちゃくちゃわかりやすかったです


### おわり