Typ

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Typoperatorer

Operatören `instanceof` används för att avgöra om en PHP-variabel är ett instansierat objekt av en viss klass:

Exempel #1 Användning av instanceof med klasser

<?php
class MyClass
{
}

class NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

Ovanstående exempel kommer att producera:

  • bool(true)
  • bool(false)

`instanceof` kan också användas för att bestämma om en variabel är ett instansierat objekt av en klass som ärver från en föräldraklass:

Exempel #2 Användning av instanceof med ärvda klasser

<?php
class ParentClass
{
}

class MyClass extends ParentClass
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>

Ovanstående exempel kommer att producera:

  • bool(true)
  • bool(true)

För att kontrollera om ett objekt inte är en instans av en klass kan den logiska inte-operatören användas.

Exempel #3 Användning av instanceof för att kontrollera om objektet inte är en instans av en klass

<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

Ovanstående exempel kommer att producera:

  • bool(true)

`instanceof` kan också användas för att avgöra om en variabel är ett instansierat objekt av en klass som implementerar ett gränssnitt:

Exempel #4 Användning av instanceof med gränssnitt

<?php
interface MyInterface
{
}

class MyClass implements MyInterface
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

Ovanstående exempel kommer att producera:

  • bool(true)
  • bool(true)

Även om `instanceof` vanligtvis används med ett litteralt klassnamn, kan det också användas med ett annat objekt eller en strängvariabel:

Exempel #5 Användning av instanceof med andra variabler

<?php
interface MyInterface
{
}

class MyClass implements MyInterface
{
}

$a = new MyClass;
$b = new MyClass;
$c = 'MyClass';
$d = 'NotMyClass';

var_dump($a instanceof $b); // $b är ett objekt av klassen MyClass
var_dump($a instanceof $c); // $c är en sträng 'MyClass'
var_dump($a instanceof $d); // $d är en sträng 'NotMyClass'
?>

Ovanstående exempel kommer att producera:

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

`instanceof` ger inget fel om variabeln som testas inte är ett objekt, det returnerar helt enkelt false. Konstanter var dock inte tillåtna före PHP 7.3.0.

Exempel #6 Användning av instanceof för att testa andra variabler

<?php
$a = 1;
$b = NULL;
$c = imagecreate(5, 5);
var_dump($a instanceof stdClass); // $a är en integer
var_dump($b instanceof stdClass); // $b är NULL
var_dump($c instanceof stdClass); // $c är en resurs
var_dump(FALSE instanceof stdClass);
?>

Ovanstående exempel kommer att producera:

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

Från och med PHP 7.3.0 är konstanter tillåtna på vänster sida av `instanceof`-operatören.

Exempel #7 Användning av instanceof för att testa konstanter

<?php
var_dump(FALSE instanceof stdClass);
?>

Utdata från ovanstående exempel i PHP 7.3:

bool(false)

Från och med PHP 8.0.0 kan `instanceof` nu användas med godtyckliga uttryck. Uttrycket måste omslutas med parenteser och producera en sträng.

Exempel #8 Användning av instanceof med godtyckligt uttryck

<?php

class ClassA extends \stdClass {}
class ClassB extends \stdClass {}
class ClassC extends ClassB {}
class ClassD extends ClassA {}

function getSomeClass(): string
{
    return ClassA::class;
}

var_dump(new ClassA instanceof ('std' . 'Class'));
var_dump(new ClassB instanceof ('Class' . 'B'));
var_dump(new ClassC instanceof ('Class' . 'A'));
var_dump(new ClassD instanceof (getSomeClass()));
?>

Utdata från ovanstående exempel i PHP 8:

bool(true)
bool(true)
bool(false)
bool(true)
Operatören `instanceof` har en funktionell variant med funktionen `is_a()`.

Se även

* get_class() * is_a()

Sid slut

Orginalsidan på Engelska : https://www.php.net/manual/en/language.operators.type.php
PHP Språkreferens