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

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

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

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

11 ответов


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

<?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)
  • $это не определено.

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

class Horse {
    var $running = false;

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

как вы можете видеть, в


вы бы использовали только $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();
  }

}

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

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();

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

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

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

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


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

вы также можете узнать больше об этом из здесь.

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

один раз я знаю, что в конечном итоге я использую this эквивалент на других языках-реализовать интерфейс "Fluent"; каждый метод класса, который в противном случае вернул бы void вместо этого возвращает this, Так что вызовы методов могут быть легко скованы вместе.

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

вышеизложенное можно назвать так:

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

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


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

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

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, я должен создать новый экземпляр теста класса, например:

$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 используется внутри класса, когда экземпляр. Это называется область.

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

Итак, основное различие между в obj$ и это С в obj$ доступ к классу из за пределами некоторые ограничения : если вы определяете что-то частная или защищенный в вашем классе, как моя переменная *$_hello*, в obj$ НЕ МОГУ доступ к нему (это личное!), но это can, так это оставить внутри класса.


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

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

$this - >var=5;


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

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

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

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

parent:: callSomeMethod ()


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