Typ: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med '== 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 === <pre> <?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass); ?> </pre> Ovanstående exempel kommer att producera: * bool(true) * bool(false) `instanceof` kan också användas för att bestämma om e...')
 
Rad 123: Rad 123:
Ovanstående exempel kommer att producera:
Ovanstående exempel kommer att producera:


* bool(true)
<pre>
* bool(true)
bool(true)
* bool(false)
bool(true)
bool(false)
</pre>


`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.
`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.

Versionen från 18 augusti 2024 kl. 06.37

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

Sid slut

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