2008-10-20 3 views
5

Ich bin ein wenig verwirrt durch eine PHP-Syntax, die mir begegnet ist. Hier ein Beispiel:

$k = $this->_tbl_key; 

if($this->$k) 
{ 
    $ret = $this->_db->updateObject($this->_tbl, $this, $this->_tbl_key, $updateNulls); 
} 
else 
{ 
    $ret = $this->_db->insertObject($this->_tbl, $this, $this->_tbl_key); 
} 

Meine Frage ist im Grunde, was bedeutet $this->$k? Ich dachte, es könnte bedeuten, dass die Elementvariable mit dem Namen was auch immer in $this->_tbl_key ist, aber wie würde das funktionieren? Ist es möglich, Elementvariablen zur Laufzeit zu einer Klasse hinzuzufügen?

Antwort

19

Es wird nachschlagen, was auch immer der Wert von "k" ist, und es als Variablenname behandeln. Diese beiden Proben sind die gleichen:

echo ($obj->myvar); 

#### 

$k = "myvar"; 
echo ($obj->$k); 
+0

OK, das ist, was ich dachte, um damit zu beginnen - ich muss herausfinden, woher diese Variable kommt, dann. –

5

Ich glaube, dass ein Fall von variable variables.

+0

Es ist jedoch nicht sehr. John Millikins Antwort ist richtig. –

+3

@Garrett: außer es ist? –

+0

Johns Antwort ist vollständiger, aber Paolo hat Recht. Dies ist eine variabel benannte Variable. Wenn Sie genauer über die OOP-Verwendung nachdenken möchten, können Sie dies auch als Variableneigenschaft bezeichnen (die in Paolos Link beschrieben wird). –