2010-10-16 2 views
3

Я получаю вид ООП и, наконец, начал создавать их в своих сценариях. Одна вещь, которую я не понимаю, это «$ 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->' not '$ this->' для последних двух строк. – Petah

+0

Возможный дубликат [что означает это значение в определении класса?] (Http://stackoverflow.com/questions/3776696/what-does-this-mean-within-a-class-definition) – Gordon

ответ

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

Этот код некорректен. Нет $this, если вы не в методе класса. Это должно быть $form. Поэтому, чтобы ответить на ваш вопрос: разница в том, что $form->addInput верен и $this->addInput недействителен!

Похоже, вы понимаете ООП лучше, чем тот, кто написал этот код. Вы пьете из испорченного колодца. Хлоп!

+1

Я просто скопировал код в файле PHP, и это действительно породило ошибку! Думаю, мне придется исправить эту публикацию. – netrox

Смежные вопросы