Когда бы вы использовали ключевое слово $this в PHP?

#php #oop

#php #ооп

Вопрос:

Когда бы вы использовали $this ключевое слово в PHP? Насколько я понимаю, $this относится к объекту, созданному без знания имени объектов.

Также ключевое слово $this может использоваться только внутри метода?

Было бы здорово показать пример, когда вы можете использовать $this .

Комментарии:

1. php.net/OOP -> Основы.

2. В частности, обратите внимание на пример # 2 здесь: php.net/manual/en/language.oop5.basic.php

3. $this это не ключевое слово в PHP (а псевдопеременная ), поэтому на ваш вопрос нельзя ответить.

Ответ №1:

Класс может содержать свои собственные константы, переменные (называемые «свойствами») и функции (называемые «методами»).

 <?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?>
  

Несколько примеров псевдопеременной $this:

 <?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")n";
        } else {
            echo "$this is not defined.n";
        }
    }
}

class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();

// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
$b = new B();
$b->bar();

// Note: the next line will issue a warning if E_STRICT is enabled.
B::bar();
?>
  

Приведенный выше пример выведет:

  • $это определено (A)
  • $это не определено.
  • $это определено (B)
  • $это не определено.

Ответ №2:

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

 class Horse {
    var $running = false;

    function run() {
        $this->running = true;
    }
}
  

Как вы можете видеть, внутри run функции мы можем использовать $this переменную для ссылки на экземпляр класса Horse, в котором мы находимся. Итак, еще одна вещь, которую следует иметь в виду, это то, что если вы создаете 2 класса Horse, $this переменная внутри каждого из них будет ссылаться на этот конкретный экземпляр класса Horse, а не на них обоих.

Ответ №3:

Вы бы использовали $ this только в том случае, если занимаетесь объектно-ориентированным программированием на PHP. Имеется в виду, если вы создаете классы. Вот пример:

 class Item {
  protected $name, $price, $qty, $total;

  public function __construct($iName, $iPrice, $iQty) {
    $this->name = $iName;
    $this->price = $iPrice;
    $this->qty = $iQty;
    $this->calculate();
  }

}
  

Комментарии:

1. Спасибо! я это понимаю, но вы бы когда-нибудь использовали $this вне метода?

2. Правильно, вы бы этого не сделали, потому что $this имеет смысл только с in a class . Вне него вы бы использовали объект, например $a = new Item(), вы могли бы сделать $a->methodName()

Ответ №4:

$this используется для создания ссылки на текущий экземпляр объекта. Таким образом, вы можете делать такие вещи, как:

 class MyClass {
    private $name;

    public function setName($name) {
        $this->name = $name;
    }

    //vs
    public function setName($pName) {
        $name = $pName;
    }
}
  

Еще одно интересное применение заключается в том, что вы можете объединять методы в цепочку:

 class MyClass2 {
    private $firstName;
    private $lastName;

    public function setFirstName($name) {
        $this->firstName = $name;
        return $this;
    }

    public function setLastName($name) {
        $this->lastName = $name;
        return $this;
    }

    public function sayHello() {
        print "Hello {$this->firstName} {$this->lastName}";
    }
}

//And now you can do:
$newInstance = new MyClass2;
$newInstance->setFirstName("John")->setLastName("Doe")->sayHello();
  

Ответ №5:

Оно используется в объектно-ориентированном программировании (ООП):

 <?php
class Example
{  
    public function foo()
    {
        //code
    }

    public function bar()
    {
        $this->foo();
    }
}
  

Доступна псевдопеременная $this
когда метод вызывается из
контекст объекта. $это ссылка
к вызывающему объекту (обычно к
объект, которому принадлежит метод,
но, возможно, другой объект, если
метод вызывается статически из
контекст вторичного объекта).

Ответ №6:

Используется, когда вы хотите работать с локальными переменными.

Вы также можете прочитать больше об этом здесь.

 function bark() {
    print "{$this->Name} says Woof!n";
}
  

Ответ №7:

Один раз, когда я знаю, что в конечном итоге использую this эквивалент в других языках, это реализовать «Свободный» интерфейс; каждый метод класса, который в противном случае возвращал бы, void вместо этого возвращает this , так что вызовы методов могут быть легко объединены в цепочку.

 public function DoThis(){
    //Do stuff here...
    return $this;
}
public function DoThat(){
   //do other stuff here...
   return $this;
}
  

Вышеуказанное можно было бы назвать следующим образом:

 myObject->DoThis()->DoThat();
  

Которое может быть полезно для некоторых вещей.

Комментарии:

1. Вы имеете в виду, что его можно вызвать как myObject->DoThis()->DoThat() ;-)?

2. @thedom — хе-хе … извините; я редко работаю на PHP и почти никогда не использую ООП / PHP. Я это исправлю … спасибо за предупреждение об этой дурацкой ошибке! 🙂

3. нет проблем… Мне просто стало интересно, и я больше не был уверен в себе, как это сделать:P // EDIT … $MyObject->doThis()->doThat() конечно, lol!

Ответ №8:

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

Например, представьте это :

 class Test {
    private $_hello = "hello";

    public function getHello () {
        echo $this->_hello; // note that I removed the $ from _hello !
    }

    public function setHello ($hello) {
        $this->_hello = $hello;
    }
}
  

Чтобы получить доступ к методу getHello, я должен создать новый экземпляр класса Test, вот так :

 $obj = new Test ();
// Then, I can access to the getHello method :
echo $obj->getHello ();
// will output "hello"

$obj->setHello("lala");
echo $obj->getHello ();
// will output "lala"    
  

Фактически, $this используется внутри класса при создании экземпляра. На него ссылаются как на область.

Внутри вашего класса вы используете $this (например, для доступа к *$_hello *), но вне класса $this НЕ ссылается на элементы внутри вашего класса (например, *$_hello *), это делает $obj.

Итак, основное различие между $ obj и $ this заключается в том, что поскольку $obj обращается к вашему классу извне, возникают некоторые ограничения : если вы определяете что-то частное или защищенное в вашем классе, например, мою переменную *$_hello *, $obj НЕ МОЖЕТ получить к нему доступ (оно закрытое!), но $this может, потому что $ this остается внутри класса.

Ответ №9:

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

думаю, у нас есть значение переменной $ var, и в ЭТОМ экземпляре этого объекта должно быть установлено значение 5

$this->var=5;

Ответ №10:

$ this используется для ссылки на методы или переменные экземпляра, принадлежащие текущему объекту

$this->name = $name или $this->callSomeMethod()

это будет использовать переменную или метод, реализованный в текущем подклассе объекта или нет.

Если вы хотели бы конкретно вызвать реализацию родительского класса, вы бы сделали что-то вроде

parent::callSomeMethod()

Ответ №11:

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

Ответ №12:

 <?php
  class identity {
    public $name;
    public $age;
    public function display() {
      return $this->name . 'is'. $this->age . 'years old';
    }
  }
?>