2010-10-16 65 views
3

我得到了一堆OOP,並最終開始在我的腳本中創建它們。有一件事我沒有得到它是創建一個類的實例後的「$ this」。例如,這個人編碼:

class Form 
{ 
protected $inputs = array();  

public function addInput($type, $name) 
{ 
    $this->inputs[] = array("type" => $type, 
      "name" => $name); 
} 


} 

$form = new form(); 

$this->addInput("text", "username"); 
$this->addInput("text", "password"); 

請注意,最後兩行顯示他使用$ this-> addInput()。

它與$ form-> addInput有什麼不同?我總是使用我用來創建類的實例的變量的名稱。我沒有看到$ this-> function()做了什麼。 PHP如何知道它指的是哪個對象?

據我所知,$ this-> var用於該對象內的任何方法。如果沒有$ this-> var而是純粹的$變量,那麼它不能用於具有該變量的方法之外的其他方法,對嗎?

相關:https://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/3689613#3689613

+3

嗯,我認爲代碼是錯誤的。它應該是'$ form->'而不是'$ this->'最後2行。 – Petah 2010-10-16 23:36:59

+0

可能重複[什麼是$這意味着在類定義?](http://stackoverflow.com/questions/3776696/what-does-this-mean-within-a-class-definition) – Gordon 2010-10-16 23:47:13

回答

3
// Incorrect 
$this->addInput("text", "username"); 
$this->addInput("text", "password"); 

此代碼是不正確。當你不在類方法中時,沒有$this。那應該是$form。所以要回答你的問題:區別在於$form->addInput是正確的,$this->addInput無效!

// Correct 
$form->addInput("text", "username"); 
$form->addInput("text", "password"); 

看起來您比編寫此代碼的人更瞭解OOP。你從一個污染的井裏喝酒。哎呀!

+1

我剛剛複製PHP文件中的代碼,它確實產生了一個錯誤!我想我必須糾正該帖子。 – netrox 2010-10-16 23:56:02