Как объяснить это ключевое слово лучше и проще? - PullRequest
5 голосов
/ 19 января 2010

Я давно использую ключевое слово this.Но когда кто-то просит меня объяснить это, я не понимаю, как это объяснить.Я знаю, что могу использовать это в методе класса для доступа к любой переменной и методу того же класса.

    class MyClass{

      function MyMethod1(){
        echo "Hello World";
      }

      function MyMethod2(){
        $this->MyMethod1();
      }

    }

Это объект класса, который нам не нужно инициализировать и которыйиспользуется только внутри класса или что-нибудь еще.Как объяснить?

Спасибо

Ответы [ 6 ]

13 голосов
/ 19 января 2010

Класс - это шаблон для объекта: он определяет, как объект выглядит (переменные) и что он может делать (функции).

Если вы создаете экземпляр класса: вы создаете объект. Если вы создаете класс, вы можете использовать «this» для ссылки на сам объект. Вот почему вы не можете установить «это», потому что это связано с объектом. Это специальная переменная только для чтения.

5 голосов
/ 19 января 2010

this ссылается на текущий экземпляр объекта класса.

this - это неявный параметр, передаваемый методам класса: он ограничен методом и обеспечивает доступ ко всем членам объекта.

2 голосов
/ 20 января 2010

Несколько человек объяснили это в схожих терминах, но подумали, что я добавлю, что, говоря с людьми, незнакомыми с объектно-ориентированным программированием, я объясняю, что определение класса - это проект, как для дома, а «это» дом, с которым вы работаете в данный момент. Могут быть и другие дома, которые выглядят точно так же, но это особый объект (дом).

2 голосов
/ 19 января 2010

Как следует из их названия, методы экземпляра работают с экземплярами класса. Откуда они знают, над чем работать? Для этого и нужен параметр this.

Когда вы вызываете метод экземпляра, вы действительно незаметно передаете дополнительный параметр: объект, для которого он вызывается. Например, когда у вас есть это:

class Basket {
  public function a() {
    $this-> ...;
    // ...
  }
  // ...
}

и вы звоните $some_basket->a(), за кадром вы фактически называете что-то вроде Basket::a($some_basket). Теперь a() знает, с каким Basket вы хотите работать. Этот специальный параметр - это то, к чему относится this: текущий объект, с которым вы имеете дело.

2 голосов
/ 19 января 2010

короткий: $this дает вам доступ к объектным переменным (и методам) Редактировать: внутри класса :) Редактировать 2: (но не в статических методах класса): D

1 голос
/ 19 января 2010

Класс - это шаблон или «кубик» для объекта.

Позволяет использовать классический пример «велосипед». Там много хаффи-байков. Тем не менее, мы создали один велосипед, и мы можем использовать ключевое слово «this» для ссылки на «этот» велосипед.

В более техническом смысле класс - это шаблон для объекта, для которого будет создан экземпляр. Во время выполнения, после того, как объект был создан или создан экземпляр самого себя, мы можем использовать ключевое слово this для внутреннего обращения к экземпляру, который выполняет этот метод.

...