Verification: a143cc29221c9be0

Php call object as array

Private and Protected properties

If we start adding private and protected properties to our Foo class, things get very interesting:

The output will be like following in this case:

array(3) {
    ["bar"]=> string(8) "barValue"
    ["*baz"]=> string(8) "bazValue"
    ["Footab"]=> string(8) "tabValue"
}

Weird, so $baz is copied to array key '*baz' and $tab is copied to Footab...

Let's try accessing those keys:

Something even more strange happens here: we get two notices.

Notice: Undefined index: *baz in [...] on line [...]
NULL

Notice: Undefined index: Footab in [...] on line [...]
NULL

I actually spent some time trying to understand why this was happening, and even the debugger was failing me! Then I tried using var_export:

The output is quite interesting:

array (
    'bar' => 'barValue',
    '' . "\0" . '*' . "\0" . 'baz' => 'bazValue',
    '' . "\0" . 'Foo' . "\0" . 'tab' => 'tabValue',
)

Null characters are used as delimiters between the visibility scope of a particular property and its name!

That's some really strange results, and they give us some insight on how PHP actually keeps us from accessing private and protected properties.

Direct property read attempt

What happens if we try to directly access the $foo properties with this new trick?

{"\0*\0baz"});
var_dump($foo->{"\0Foo\0tab"});

Looks like the engine was patched after PHP 5.1 to fix this (un-documented break), since we get a fatal:

Fatal error: Cannot access property started with '\0' in [...] on line [...]

Too bad! That would have had interesting use cases. The change makes sense though, since we shouldn't modify internal state without explicitly using an API that cries out "I do things with your objects state!".

Verwenden Sie Type Casting, um ein Array in ein Objekt in PHP zu konvertieren

Typecasting hilft bei der Konvertierung des Datentyps einer Variablen. Wir können eine Integer in eine Float, String, usw. mittels Typecasting konvertieren. Nun werden wir Typecasting verwenden, um ein Array in ein Objekt in PHP zu konvertieren. Die korrekte Methode, um ein Array in ein Objekt zu casten, ist wie folgt:

$variableName = (object)$arrayName;

Das Programm unten zeigt, wie wir Type Casting benutzen können, um ein Array in ein Objekt zu konvertieren.

Ausgabe:

The object is 
object(stdClass)#1 (10) {
  [0]=>
  string(4) "Rose"
  [1]=>
  string(4) "Lili"
  [2]=>
  string(0) ""
  [3]=>
  string(7) "Jasmine"
  [4]=>
  string(8) "Hibiscus"
  [5]=>
  string(5) "Tulip"
  [6]=>
  string(10) "Sun Flower"
  [7]=>
  string(0) ""
  [8]=>
  string(8) "Daffodil"
  [9]=>
  string(5) "Daisy"
}

Verwenden Sie die Funktionen json_encode() und json_decode(), um ein Array in ein Objekt in PHP zu konvertieren

Wir können die Funktionen json_encode() und json_decode() benutzen, um ein Array in ein Objekt in PHP zu konvertieren. Die Funktion json_encode() wird das Array in eine JSON-Zeichenkette konvertieren. Dann werden wir die Funktion json_decode() benutzen, um diesen String in ein Objekt zu konvertieren.

Die korrekte Syntax zur Verwendung der json_encode() Funktion lautet wie folgt:

json_encode($variable, $option, $depth)

Die Funktion json_encode() akzeptiert drei Parameter. Die Einzelheiten ihrer Parameter sind wie folgt

Parameter Beschreibung
$variable obligatorisch Es ist der Wert, den wir in eine JSON Saite umwandeln wollen.
$option optional Es ist die Bitmaske, die aus mehreren Konstanten besteht. Sie können diese Konstanten hier überprüfen.
$depth optional Es ist die Tiefe, sie sollte größer als Null sein.

Die korrekte Syntax zur Verwendung der json_decode() Funktion lautet wie folgt:

json_decode($jsonString, $assoc, $depth, $options)

Die Funktion json_decode() akzeptiert vier Parameter. Die Einzelheiten ihrer Parameter sind wie folgt

Parameter Beschreibung
$jsonString obligatorisch Es ist die JSON-Zeichenkette, die wir in ein Objekt konvertieren wollen.
$assoc optional Es handelt sich um eine boolesche Variable. Wenn sie auf TRUE gesetzt wird, gibt sie das Objekt als assoziatives Array zurück.
$depth optional Es ist die Tiefe, sie sollte größer als Null sein.
$options optional Es ist die Bitmaske von JSON_OBJECT_AS_ARRAY, JSON_BIGINT_AS_STRING,, JSON_THROW_ON_ERROR.

Das Programm, das ein Array mit diesen beiden Funktionen in ein Objekt konvertiert, ist wie folgt:

Ausgabe:

The object is:
array(8) {
  [0]=>
  string(4) "Rose"
  [1]=>
  string(4) "Lili"
  [2]=>
  string(7) "Jasmine"
  [3]=>
  string(8) "Hibiscus"
  [4]=>
  string(5) "Tulip"
  [5]=>
  string(10) "Sun Flower"
  [6]=>
  string(8) "Daffodil"
  [7]=>
  string(5) "Daisy"
}