# 类型运算符

检测一个变量是否是某个类的实例。

```php
<?php

class Foo
{
    //
}

class Bar
{
    //
}

$foo = new Foo();
var_dump($foo instanceof Foo); // bool(true)
var_dump($foo instanceof Bar); // bool(false)

```

检测一个变量是否不是某个类的实例。

```php
<?php

class Foo
{
    //
}

$foo = new Foo();
var_dump(!($foo instanceof stdClass)); // bool(true)

```

检测一个变量是否是继承自某个父类的子类的实例。

```php
<?php

class Foo
{
    //
}

class Bar extends Foo
{
    //
}

$bar = new Bar();
var_dump($bar instanceof Foo); // bool(true)
var_dump($bar instanceof Bar); // bool(true)

```

检测一个变量是否是实现某个接口的实例。

```php
<?php

interface Foo
{
    //
}

class Bar implements Foo
{
    //
}

$bar = new Bar();
var_dump($bar instanceof Foo); // bool(true)
var_dump($bar instanceof Bar); // bool(true)

```

检测一个变量是否是某个对象或字符串变量的实例。

```php
<?php

interface Foo
{
    //
}

class Bar implements Foo
{
    //
}

$bar = new Bar();
$baz = 'Foo';
$qux = 'Bar';
var_dump($bar instanceof $baz); // bool(true)
var_dump($bar instanceof $qux); // bool(true)

```

如果被检测的变量不是对象，则并不发出任何错误信息而是返回 `false` 。

```php
<?php

$foo = 1;
var_dump($foo instanceof stdClass); // bool(false)

$bar = [];
var_dump($bar instanceof stdClass); // bool(false)

$baz = null;
var_dump($baz instanceof stdClass); // bool(false)

$qux = false;
var_dump($qux instanceof stdClass); // bool(false)

```

