Tür İşleçleri

instanceof işleci, bir PHP değişkeninin belli bir sınıfın nesnel örneği olup olmadığını saptar:

Örnek 1 - instanceof ve sınıflar

<?php
class Sınıfım
{
}

class 
BaşkaSınıf
{
}
$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof BaşkaSınıf);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(false)

instanceof ayrıca, bir değişkenin, bir ebeveyn sınıftan miras alınan bir sınıfın nesnel örneği olup olmadığını saptamak için de kullanılabilir:

Örnek 2 - Miras alınan sınıflar ve instanceof kullanımı

<?php
class EbeveynSınıf
{
}

class 
Sınıfım extends EbeveynSınıf
{
}

$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof EbeveynSınıf);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)

Bir nesne bir sınıfın örneği değilse bunu sınamak için mantıksal değil işleci kullanılabilir.

Örnek 3 - Bir sınıfın örneği olmayan bir sınıfın instanceof ile sınanması

<?php
class Sınıfım
{
}

$a = new Sınıfım;
var_dump(!($a instanceof stdClass));
?>

Yukarıdaki örneğin çıktısı:

bool(true)

Son olarak, instanceof işleci, bir değişkenin, bir arayüzü gerçekleyen bir sınıfın örneği olup olmadığını sınamak için kullanılabilir:

Örnek 4 - Arayüzler için instanceof kullanımı

<?php
interface Arayüzüm
{
}

class 
Sınıfım implements Arayüzüm
{
}

$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof Arayüzüm);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)

instanceof işlecinin normal olarak bir sayıl sınıf ismi ile kullanılmasının yanında başka bir nesne veya bir dizge değişkeni ile de kullanılabilir:

Örnek 5 - Başka değişkenlerle instanceof kullanımı

<?php
interface Arayüzüm
{
}

class 
Sınıfım implements Arayüzüm
{
}

$a = new Sınıfım;
$b = new Sınıfım;
$c 'Sınıfım';
$d 'BaşkaSınıf';

var_dump($a instanceof $b); // $b, Sınıfım sınıfının bir nesnesidir
var_dump($a instanceof $c); // $c 'Sınıfım' dizgesini içerir
var_dump($a instanceof $d); // $d 'BaşkaSınıf' dizgesini içerir
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)
bool(false)

Sınanan değişken bir nesne değilse instanceof hata çıktılamaz, basitçe FALSE döndürür. Sabitlere izin verilmez.

Örnek 6 - Değişkenleri sınamak için instanceof kullanımı

<?php
$a 
1;
$b NULL;
$c imagecreate(55);
var_dump($a instanceof stdClass); // $a bir tamsayıdır
var_dump($b instanceof stdClass); // $b NULL'dur
var_dump($c instanceof stdClass); // $c bir özkaynaktır
var_dump(FALSE instanceof stdClass);
?>

Yukarıdaki örneğin çıktısı:

bool(false)
bool(false)
bool(false)
PHP Fatal error:  instanceof expects an object instance, constant given

Burada bilmeniz gereken bir kaç zorluk vardır. PHP 5.1.0 öncesinde, instanceof işleci, sınıf mevcut değilse __autoload() çağrısı yapardı. Buna ek olarak, sınıf yüklenmemişse bir ölümcül hata oluşurdu. Bunun olmaması için bir devingen sınıf gönderimi veya sınıf ismini içeren bir dizge değişkeni kullanılabilir:

Örnek 7 - PHP 5.0'da instanceof ile ölümcül hatalardan ve sınıf ismi aramalarından kaçınmak

<?php
$d 
'BaşkaSınıf';
var_dump($a instanceof $d); // burada ölümcül hata oluşmaz
?>

Yukarıdaki örneğin çıktısı:

bool(false)

instanceof işleci PHP 5'ten itibaren mevcuttur. Evvelce is_a() işlevi kullanılırdı fakat instanceof kullanımını teşvik etmek için is_a() kullanımı önerilmemekteyse de PHP 5.3.0'dan itibaren bundan vazgeçilmiştir.

Ayrıca, get_class() ve is_a() işlevlerine de bakınız.