magiska metoder: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med 'Magic Methods ¶ Magic methods are special methods which override PHP's default's action when certain actions are performed on an object. Caution All methods names starting with __ are reserved by PHP. Therefore, it is not recommended to use such method names unless overriding PHP's behavior. The following method names are considered magical: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __serializ...')
 
 
(3 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
Magic Methods
== Magiska Metoder (Magic Methods) ==
Magic methods are special methods which override PHP's default's action when certain actions are performed on an object.
Magiska metoder är speciella metoder som åsidosätter PHP:s standardåtgärder när vissa åtgärder utförs på ett objekt.


Caution
'''Varning:''' Alla metoder som börjar med __ är reserverade av PHP. Därför rekommenderas det inte att använda sådana metodnamn om man inte avser att åsidosätta PHP:s beteende.
All methods names starting with __ are reserved by PHP. Therefore, it is not recommended to use such method names unless overriding PHP's behavior.


The following method names are considered magical: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __serialize(), __unserialize(), __toString(), __invoke(), __set_state(), __clone(), and __debugInfo().
Följande metodnamn betraktas som magiska: [[__construct()]], [[__destruct()]], [[__call()]], [[__callStatic()]], ,[[__get()]] [[__set()]], [[__isset()]], [[__unset()]], [[__sleep()]], [[__wakeup()]], [[__serialize()]], [[__unserialize()]], [[__toString()]], [[__invoke()]], __set_state(), __clone()[[, och __debugInfo()]].


Warning
'''Varning:''' Alla magiska metoder, med undantag för [[__construct()]], [[__destruct()]], och [[__clone()]], måste deklareras som public, annars genereras en E_WARNING. Före PHP 8.0.0 genererades ingen varning för de magiska metoderna [[__sleep()]], [[__wakeup()]], [[__serialize()]], [[__unserialize()]], och [[__set_state()]].
All magic methods, with the exception of __construct(), __destruct(), and __clone(), must be declared as public, otherwise an E_WARNING is emitted. Prior to PHP 8.0.0, no diagnostic was emitted for the magic methods __sleep(), __wakeup(), __serialize(), __unserialize(), and __set_state().


Warning
'''Varning:''' Om typdeklarationer används i definitionen av en magisk metod måste de vara identiska med den signatur som beskrivs i detta dokument. Annars genereras ett fatalt fel. Före PHP 8.0.0 genererades ingen varning. Dock måste [[__construct()]] och [[__destruct()]] inte deklarera någon returtyp; annars genereras ett fatalt fel.
If type declarations are used in the definition of a magic method, they must be identical to the signature described in this document. Otherwise, a fatal error is emitted. Prior to PHP 8.0.0, no diagnostic was emitted. However, __construct() and __destruct() must not declare a return type; otherwise a fatal error is emitted.


__sleep() and __wakeup()
=== [[__sleep()]] och [[__wakeup()]] ===
<pre>
public __sleep(): array
public __sleep(): array
public __wakeup(): void
public __wakeup(): void
serialize() checks if the class has a function with the magic name __sleep(). If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. If the method doesn't return anything then null is serialized and E_NOTICE is issued.
</pre>


Note:
serialize() kontrollerar om klassen har en funktion med det magiska namnet __sleep(). Om så är fallet utförs den funktionen innan någon serialisering sker. Funktionen kan städa upp objektet och förväntas returnera en array med namnen på alla variabler i det objekt som ska serialiseras. Om metoden inte returnerar något kommer null att serialiseras och en E_NOTICE kommer att genereras.


It is not possible for __sleep() to return names of private properties in parent classes. Doing this will result in an E_NOTICE level error. Use __serialize() instead.
'''Notera:''' Det är inte möjligt för __sleep() att returnera namn på privata egenskaper i föräldrarklasser. Att göra detta resulterar i ett fel på E_NOTICE-nivå. Använd istället __serialize().


Note:
'''Notera:''' Från och med PHP 8.0.0 genereras en varning om __sleep() returnerar ett värde som inte är en array. Tidigare genererades en notis.


As of PHP 8.0.0, returning a value which is not an array from __sleep() generates a warning. Previously, it generated a notice.
Syftet med __sleep() är att spara eventuell osparad data eller utföra liknande städuppgifter. Funktionen är också användbar om ett mycket stort objekt inte behöver sparas helt.


The intended use of __sleep() is to commit pending data or perform similar cleanup tasks. Also, the function is useful if a very large object doesn't need to be saved completely.
Å andra sidan kontrollerar unserialize() om det finns en funktion med det magiska namnet __wakeup(). Om den finns kan denna funktion återskapa eventuella resurser som objektet kan ha.


Conversely, unserialize() checks for the presence of a function with the magic name __wakeup(). If present, this function can reconstruct any resources that the object may have.
Syftet med __wakeup() är att återställa eventuella databasanslutningar som kan ha förlorats under serialiseringen och utföra andra återinitialiseringar.
 
The intended use of __wakeup() is to reestablish any database connections that may have been lost during serialization and perform other reinitialization tasks.
 
Example #1 Sleep and wakeup


'''Exempel #1 Sömn och uppvaknande'''
<pre>
<?php
<?php
class Connection
class Connection
Rad 62: Rad 58:
         $this->connect();
         $this->connect();
     }
     }
}?>
}
__serialize() and __unserialize()
?>
</pre>
 
=== [[__serialize()]] och [[__unserialize()]] ===
<pre>
public __serialize(): array
public __serialize(): array
public __unserialize(array $data): void
public __unserialize(array $data): void
serialize() checks if the class has a function with the magic name __serialize(). If so, that function is executed prior to any serialization. It must construct and return an associative array of key/value pairs that represent the serialized form of the object. If no array is returned a TypeError will be thrown.
</pre>
 
Note:


If both __serialize() and __sleep() are defined in the same object, only __serialize() will be called. __sleep() will be ignored. If the object implements the Serializable interface, the interface's serialize() method will be ignored and __serialize() used instead.
serialize() kontrollerar om klassen har en funktion med det magiska namnet [[__serialize()]]. Om så är fallet utförs den funktionen innan någon serialisering sker. Funktionen måste konstruera och returnera en associativ array av nyckel/värde-par som representerar objektets serialiserade form. Om ingen array returneras kastas en TypeError.


The intended use of __serialize() is to define a serialization-friendly arbitrary representation of the object. Elements of the array may correspond to properties of the object but that is not required.
'''Notera:''' Om både [[__serialize()]] och [[__sleep()]] är definierade i samma objekt kommer endast __serialize() att anropas. __sleep() kommer att ignoreras. Om objektet implementerar Serializable-gränssnittet kommer gränssnittets serialize()-metod att ignoreras och [[__serialize()]] användas istället.


Conversely, unserialize() checks for the presence of a function with the magic name __unserialize(). If present, this function will be passed the restored array that was returned from __serialize(). It may then restore the properties of the object from that array as appropriate.
Syftet med [[__serialize()]] är att definiera en serialiseringsvänlig godtycklig representation av objektet. Elementen i arrayen kan motsvara objektets egenskaper men det är inte ett krav.


Note:
Å andra sidan kontrollerar [[unserialize()]] om det finns en funktion med det magiska namnet [[__unserialize()]]. Om den finns kommer denna funktion att ta emot den återställda arrayen som returnerades från [[__serialize()]]. Den kan sedan återställa objektets egenskaper från den arrayen på lämpligt sätt.


If both __unserialize() and __wakeup() are defined in the same object, only __unserialize() will be called. __wakeup() will be ignored.
'''Notera:''' Om både [[__unserialize()]] och [[__wakeup()]] är definierade i samma objekt kommer endast [[__unserialize()]] att anropas. [[__wakeup()]] kommer att ignoreras.


Note:
'''Notera:''' Denna funktionalitet är tillgänglig från och med PHP 7.4.0.
 
This feature is available as of PHP 7.4.0.
 
Example #2 Serialize and unserialize


'''Exempel #2 Serialisering och unserialisering'''
<pre>
<?php
<?php
class Connection
class Connection
Rad 122: Rad 118:
         $this->connect();
         $this->connect();
     }
     }
}?>
}
__toString()
?>
</pre>
 
=== [[__toString()]] ===
<pre>
public __toString(): string
public __toString(): string
The __toString() method allows a class to decide how it will react when it is treated like a string. For example, what echo $obj; will print.
</pre>


Warning
Metoden [[__toString()]] gör det möjligt för en klass att bestämma hur den kommer att reagera när den behandlas som en sträng. Till exempel vad echo $obj; kommer att skriva ut.
As of PHP 8.0.0, the return value follows standard PHP type semantics, meaning it will be coerced into a string if possible and if strict typing is disabled.


A Stringable object will not be accepted by a string type declaration if strict typing is enabled. If such behaviour is wanted the type declaration must accept Stringable and string via a union type.
'''Varning:''' Från och med PHP 8.0.0 följer returvärdet standard PHP-typssemantik, vilket innebär att det kommer att omvandlas till en sträng om möjligt och om strikt typning är inaktiverad.


As of PHP 8.0.0, any class that contains a __toString() method will also implicitly implement the Stringable interface, and will thus pass type checks for that interface. Explicitly implementing the interface anyway is recommended.
Ett Stringable-objekt kommer inte att accepteras av en strängtypsdeklaration om strikt typning är aktiverad. Om ett sådant beteende önskas måste typsdeklarationen acceptera Stringable och string via en unionstyp.


In PHP 7.4, the returned value must be a string, otherwise an Error is thrown.
Från och med PHP 8.0.0 kommer alla klasser som innehåller en __toString()-metod också implicit att implementera Stringable-gränssnittet och kommer därmed att klara typtester för det gränssnittet. Det rekommenderas att gränssnittet ändå implementeras explicit.


Prior to PHP 7.4.0, the returned value must be a string, otherwise a fatal E_RECOVERABLE_ERROR is emitted.
I PHP 7.4 måste returvärdet vara en sträng, annars kastas ett fel.


Warning
Före PHP 7.4.0 måste returvärdet vara en sträng, annars genereras ett fatalt E_RECOVERABLE_ERROR.
It was not possible to throw an exception from within a __toString() method prior to PHP 7.4.0. Doing so will result in a fatal error.


Example #3 Simple example
'''Varning:''' Det var inte möjligt att kasta ett undantag från en __toString()-metod före PHP 7.4.0. Att göra det resulterade i ett fatalt fel.


'''Exempel #3 Enkelt exempel'''
<pre>
<?php
<?php
// Declare a simple class
// Deklarera en enkel klass
class TestClass
class TestClass
{
{
Rad 163: Rad 163:
echo $class;
echo $class;
?>
?>
The above example will output:
</pre>
 
Det ovanstående exemplet kommer att skriva ut:


Hello
Hello
__invoke()
 
=== __invoke() ===
<pre>
__invoke( ...$values): mixed
__invoke( ...$values): mixed
The __invoke() method is called when a script tries to call an object as a function.
</pre>


Example #4 Using __invoke()
Metoden __invoke() anropas när ett skript försöker anropa ett objekt som en funktion.


'''Exempel #4 Använda __invoke()'''
<pre>
<?php
<?php
class CallableClass
class CallableClass
Rad 184: Rad 190:
var_dump(is_callable($obj));
var_dump(is_callable($obj));
?>
?>
The above example will output:
</pre>
 
Det ovanstående exemplet kommer att skriva ut:


int(5)
int(5)
bool(true)
bool(true)
Example #5 Using __invoke()


'''Exempel #5 Använda __invoke()'''
<pre>
<?php
<?php
class Sort
class Sort
Rad 212: Rad 221:
];
];


// sort customers by first name
// sortera kunder efter förnamn
usort($customers, new Sort('first_name'));
usort($customers, new Sort('first_name'));
print_r($customers);
print_r($customers);


// sort customers by last name
// sortera kunder efter efternamn
usort($customers, new Sort('last_name'));
usort($customers, new Sort('last_name'));
print_r($customers);
print_r($customers);
?>
?>
The above example will output:
</pre>
 
Det ovanstående exemplet kommer att skriva ut:


<pre>
Array
Array
(
(
Rad 270: Rad 282:


)
)
__set_state()
</pre>
 
=== [[__set_state()]] ===
<pre>
static __set_state(array $properties): object
static __set_state(array $properties): object
This static method is called for classes exported by var_export().
</pre>


The only parameter of this method is an array containing exported properties in the form ['property' => value, ...].
Denna statiska metod anropas för klasser som exporteras av var_export().


Example #6 Using __set_state()
Den enda parametern för denna metod är en array som innehåller exporterade egenskaper i form av ['property' => value, ...].


'''Exempel #6 Använda __set_state()'''
<pre>
<?php
<?php


Rad 303: Rad 320:
var_dump($c);
var_dump($c);
?>
?>
The above example will output:
</pre>


Det ovanstående exemplet kommer att skriva ut:
<pre>
string(60) "A::__set_state(array(
string(60) "A::__set_state(array(
   'var1' => 5,
   'var1' => 5,
Rad 315: Rad 335:
   string(3) "foo"
   string(3) "foo"
}
}
Note: When exporting an object, var_export() does not check whether __set_state() is implemented by the object's class, so re-importing objects will result in an Error exception, if __set_state() is not implemented. Particularly, this affects some internal classes. It is the responsibility of the programmer to verify that only objects will be re-imported, whose class implements __set_state().
</pre>


__debugInfo()
'''Notera:''' När ett objekt exporteras kontrollerar var_export() inte om __set_state() är implementerat av objektets klass, så att återimportera objekt kommer att resultera i ett Error-undantag om __set_state() inte är implementerat. Detta påverkar särskilt vissa interna klasser. Det är programmerarens ansvar att verifiera att endast objekt som ska återimporteras är sådana vars klass implementerar __set_state().
 
=== __debugInfo() ===
<pre>
__debugInfo(): array
__debugInfo(): array
This method is called by var_dump() when dumping an object to get the properties that should be shown. If the method isn't defined on an object, then all public, protected and private properties will be shown.
</pre>


Example #7 Using __debugInfo()
Denna metod anropas av var_dump() när ett objekt dumpas för att få de egenskaper som ska visas. Om metoden inte är definierad för ett objekt kommer alla publika, skyddade och privata egenskaper att visas.


'''Exempel #7 Använda __debugInfo()'''
<pre>
<?php
<?php
class C {
class C {
Rad 340: Rad 365:
var_dump(new C(42));
var_dump(new C(42));
?>
?>
The above example will output:
</pre>


Det ovanstående exemplet kommer att skriva ut:
<pre>
object(C)#1 (1) {
object(C)#1 (1) {
   ["propSquared"]=>
   ["propSquared"]=>
   int(1764)
   int(1764)
}
}
</pre>
= Sidslut =
= Sidslut =
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.magic.php
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.magic.php

Nuvarande version från 18 augusti 2024 kl. 19.31

Magiska Metoder (Magic Methods)

Magiska metoder är speciella metoder som åsidosätter PHP:s standardåtgärder när vissa åtgärder utförs på ett objekt.

Varning: Alla metoder som börjar med __ är reserverade av PHP. Därför rekommenderas det inte att använda sådana metodnamn om man inte avser att åsidosätta PHP:s beteende.

Följande metodnamn betraktas som magiska: __construct(), __destruct(), __call(), __callStatic(), ,__get() __set(), __isset(), __unset(), __sleep(), __wakeup(), __serialize(), __unserialize(), __toString(), __invoke(), __set_state(), __clone(), och __debugInfo().

Varning: Alla magiska metoder, med undantag för __construct(), __destruct(), och __clone(), måste deklareras som public, annars genereras en E_WARNING. Före PHP 8.0.0 genererades ingen varning för de magiska metoderna __sleep(), __wakeup(), __serialize(), __unserialize(), och __set_state().

Varning: Om typdeklarationer används i definitionen av en magisk metod måste de vara identiska med den signatur som beskrivs i detta dokument. Annars genereras ett fatalt fel. Före PHP 8.0.0 genererades ingen varning. Dock måste __construct() och __destruct() inte deklarera någon returtyp; annars genereras ett fatalt fel.

__sleep() och __wakeup()

public __sleep(): array
public __wakeup(): void

serialize() kontrollerar om klassen har en funktion med det magiska namnet __sleep(). Om så är fallet utförs den funktionen innan någon serialisering sker. Funktionen kan städa upp objektet och förväntas returnera en array med namnen på alla variabler i det objekt som ska serialiseras. Om metoden inte returnerar något kommer null att serialiseras och en E_NOTICE kommer att genereras.

Notera: Det är inte möjligt för __sleep() att returnera namn på privata egenskaper i föräldrarklasser. Att göra detta resulterar i ett fel på E_NOTICE-nivå. Använd istället __serialize().

Notera: Från och med PHP 8.0.0 genereras en varning om __sleep() returnerar ett värde som inte är en array. Tidigare genererades en notis.

Syftet med __sleep() är att spara eventuell osparad data eller utföra liknande städuppgifter. Funktionen är också användbar om ett mycket stort objekt inte behöver sparas helt.

Å andra sidan kontrollerar unserialize() om det finns en funktion med det magiska namnet __wakeup(). Om den finns kan denna funktion återskapa eventuella resurser som objektet kan ha.

Syftet med __wakeup() är att återställa eventuella databasanslutningar som kan ha förlorats under serialiseringen och utföra andra återinitialiseringar.

Exempel #1 Sömn och uppvaknande

<?php
class Connection
{
    protected $link;
    private $dsn, $username, $password;
    
    public function __construct($dsn, $username, $password)
    {
        $this->dsn = $dsn;
        $this->username = $username;
        $this->password = $password;
        $this->connect();
    }
    
    private function connect()
    {
        $this->link = new PDO($this->dsn, $this->username, $this->password);
    }
    
    public function __sleep()
    {
        return array('dsn', 'username', 'password');
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
}
?>

__serialize() och __unserialize()

public __serialize(): array
public __unserialize(array $data): void

serialize() kontrollerar om klassen har en funktion med det magiska namnet __serialize(). Om så är fallet utförs den funktionen innan någon serialisering sker. Funktionen måste konstruera och returnera en associativ array av nyckel/värde-par som representerar objektets serialiserade form. Om ingen array returneras kastas en TypeError.

Notera: Om både __serialize() och __sleep() är definierade i samma objekt kommer endast __serialize() att anropas. __sleep() kommer att ignoreras. Om objektet implementerar Serializable-gränssnittet kommer gränssnittets serialize()-metod att ignoreras och __serialize() användas istället.

Syftet med __serialize() är att definiera en serialiseringsvänlig godtycklig representation av objektet. Elementen i arrayen kan motsvara objektets egenskaper men det är inte ett krav.

Å andra sidan kontrollerar unserialize() om det finns en funktion med det magiska namnet __unserialize(). Om den finns kommer denna funktion att ta emot den återställda arrayen som returnerades från __serialize(). Den kan sedan återställa objektets egenskaper från den arrayen på lämpligt sätt.

Notera: Om både __unserialize() och __wakeup() är definierade i samma objekt kommer endast __unserialize() att anropas. __wakeup() kommer att ignoreras.

Notera: Denna funktionalitet är tillgänglig från och med PHP 7.4.0.

Exempel #2 Serialisering och unserialisering

<?php
class Connection
{
    protected $link;
    private $dsn, $username, $password;

    public function __construct($dsn, $username, $password)
    {
        $this->dsn = $dsn;
        $this->username = $username;
        $this->password = $password;
        $this->connect();
    }

    private function connect()
    {
        $this->link = new PDO($this->dsn, $this->username, $this->password);
    }

    public function __serialize(): array
    {
        return [
          'dsn' => $this->dsn,
          'user' => $this->username,
          'pass' => $this->password,
        ];
    }

    public function __unserialize(array $data): void
    {
        $this->dsn = $data['dsn'];
        $this->username = $data['user'];
        $this->password = $data['pass'];

        $this->connect();
    }
}
?>

__toString()

public __toString(): string

Metoden __toString() gör det möjligt för en klass att bestämma hur den kommer att reagera när den behandlas som en sträng. Till exempel vad echo $obj; kommer att skriva ut.

Varning: Från och med PHP 8.0.0 följer returvärdet standard PHP-typssemantik, vilket innebär att det kommer att omvandlas till en sträng om möjligt och om strikt typning är inaktiverad.

Ett Stringable-objekt kommer inte att accepteras av en strängtypsdeklaration om strikt typning är aktiverad. Om ett sådant beteende önskas måste typsdeklarationen acceptera Stringable och string via en unionstyp.

Från och med PHP 8.0.0 kommer alla klasser som innehåller en __toString()-metod också implicit att implementera Stringable-gränssnittet och kommer därmed att klara typtester för det gränssnittet. Det rekommenderas att gränssnittet ändå implementeras explicit.

I PHP 7.4 måste returvärdet vara en sträng, annars kastas ett fel.

Före PHP 7.4.0 måste returvärdet vara en sträng, annars genereras ett fatalt E_RECOVERABLE_ERROR.

Varning: Det var inte möjligt att kasta ett undantag från en __toString()-metod före PHP 7.4.0. Att göra det resulterade i ett fatalt fel.

Exempel #3 Enkelt exempel

<?php
// Deklarera en enkel klass
class TestClass
{
    public $foo;

    public function __construct($foo)
    {
        $this->foo = $foo;
    }

    public function __toString()
    {
        return $this->foo;
    }
}

$class = new TestClass('Hello');
echo $class;
?>

Det ovanstående exemplet kommer att skriva ut:

Hello

__invoke()

__invoke( ...$values): mixed

Metoden __invoke() anropas när ett skript försöker anropa ett objekt som en funktion.

Exempel #4 Använda __invoke()

<?php
class CallableClass
{
    public function __invoke($x)
    {
        var_dump($x);
    }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>

Det ovanstående exemplet kommer att skriva ut:

int(5) bool(true)

Exempel #5 Använda __invoke()

<?php
class Sort
{
    private $key;

    public function __construct(string $key)
    {
        $this->key = $key;
    }

    public function __invoke(array $a, array $b): int
    {
        return $a[$this->key] <=> $b[$this->key];
    }
}

$customers = [
    ['id' => 1, 'first_name' => 'John', 'last_name' => 'Do'],
    ['id' => 3, 'first_name' => 'Alice', 'last_name' => 'Gustav'],
    ['id' => 2, 'first_name' => 'Bob', 'last_name' => 'Filipe']
];

// sortera kunder efter förnamn
usort($customers, new Sort('first_name'));
print_r($customers);

// sortera kunder efter efternamn
usort($customers, new Sort('last_name'));
print_r($customers);
?>

Det ovanstående exemplet kommer att skriva ut:

Array
(
    [0] => Array
        (
            [id] => 3
            [first_name] => Alice
            [last_name] => Gustav
        )

    [1] => Array
        (
            [id] => 2
            [first_name] => Bob
            [last_name] => Filipe
        )

    [2] => Array
        (
            [id] => 1
            [first_name] => John
            [last_name] => Do
        )

)
Array
(
    [0] => Array
        (
            [id] => 1
            [first_name] => John
            [last_name] => Do
        )

    [1] => Array
        (
            [id] => 2
            [first_name] => Bob
            [last_name] => Filipe
        )

    [2] => Array
        (
            [id] => 3
            [first_name] => Alice
            [last_name] => Gustav
        )

)

__set_state()

static __set_state(array $properties): object

Denna statiska metod anropas för klasser som exporteras av var_export().

Den enda parametern för denna metod är en array som innehåller exporterade egenskaper i form av ['property' => value, ...].

Exempel #6 Använda __set_state()

<?php

class A
{
    public $var1;
    public $var2;

    public static function __set_state($an_array)
    {
        $obj = new A;
        $obj->var1 = $an_array['var1'];
        $obj->var2 = $an_array['var2'];
        return $obj;
    }
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';

$b = var_export($a, true);
var_dump($b);
eval('$c = ' . $b . ';');
var_dump($c);
?>

Det ovanstående exemplet kommer att skriva ut:

string(60) "A::__set_state(array(
   'var1' => 5,
   'var2' => 'foo',
))"
object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}

Notera: När ett objekt exporteras kontrollerar var_export() inte om __set_state() är implementerat av objektets klass, så att återimportera objekt kommer att resultera i ett Error-undantag om __set_state() inte är implementerat. Detta påverkar särskilt vissa interna klasser. Det är programmerarens ansvar att verifiera att endast objekt som ska återimporteras är sådana vars klass implementerar __set_state().

__debugInfo()

__debugInfo(): array

Denna metod anropas av var_dump() när ett objekt dumpas för att få de egenskaper som ska visas. Om metoden inte är definierad för ett objekt kommer alla publika, skyddade och privata egenskaper att visas.

Exempel #7 Använda __debugInfo()

<?php
class C {
    private $prop;

    public function __construct($val) {
        $this->prop = $val;
    }

    public function __debugInfo() {
        return [
            'propSquared' => $this->prop ** 2,
        ];
    }
}

var_dump(new C(42));
?>

Det ovanstående exemplet kommer att skriva ut:

object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}

Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.magic.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt