2017-01-24 5 views
1

Ok, so bin ich ein wenig neugierig zu folgendemString dereferencing in Stringliteral

$string = "Hello world!"; 

$files = (object)[ 
    "file" => (object)[ 
     "name" => "filename.txt", 
     "tmp_name" => "tempfile.txt" 
    ] 
]; 

Wenn ich versuche, die folgende ... echo "$string"; es funktioniert Echo. Aber das echo "$files->file->name"; funktioniert nicht. Warum ist das so, wenn beide Zeichenfolgen sind? Ich verstehe, dass ein Objekt ein Objekt ist und ein anderes eine Zeichenkette ist, aber warum die Zeichenkette im Objekt nicht entreferenziert werden kann. Kann jemand das erklären?

Antwort

2

Hier ist nichts über Dereferenzierung. Es geht darum, dass php versteht, was du drucken willst.

Möchten Sie $files Objekt und Zeichenfolge '->file->name' drucken?

Oder möchten Sie drucken $files->name Eigenschaft und String '->name'?

Oder möchten Sie Wert von name Eigenschaft oder file Eigenschaft von $files Objekt drucken?

Proper-Code ist

echo "{$files->file->name}"; 

Oder einfach:

echo $files->file->name; 

Mehr Infos here

1

Während Ihrer String-Parsing, php nicht weiß, was einen Teil Ihres Variable ist und was isn‘ t (es wird bei der ersten - als das kann nicht Teil eines Variablennamens sein ...).

können Sie lösen, die mit {...}:

<?php 
$string = "Hello world!"; 

$files = (object)[ 
    "file" => (object)[ 
     "name" => "filename.txt", 
     "tmp_name" => "tempfile.txt" 
    ] 
]; 
echo "{$files->file->name}"; 

An example.

Verwandte Themen