web-dev-qa-db-ja.com

PHPで変数$ thisはどういう意味ですか?

PHPに変数$thisが常に表示され、それが何に使用されているのかわかりません。個人的に使用したことはありません。検索エンジンは$を無視し、「this」という単語を検索することになります。

PHPで変数$ thisがどのように機能するかを教えてもらえますか?

94
waiwai933

現在のオブジェクトへの参照であり、オブジェクト指向コードで最も一般的に使用されています。

例:

<?php
class Person {
    public $name;

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

$jack = new Person('Jack');
echo $jack->name;

これにより、作成されたオブジェクトのプロパティとして「Jack」文字列が保存されます。

117
meder omuraliev

Phpの$this変数について知る最良の方法は、PHPの内容を尋ねることです。私たちに尋ねないで、コンパイラに尋ねてください:

print gettype($this);            //object
print get_object_vars($this);    //Array
print is_array($this);           //false
print is_object($this);          //true
print_r($this);                  //dump of the objects inside it
print count($this);              //true
print get_class($this);          //YourProject\YourFile\YourClass
print isset($this);              //true
print get_parent_class($this);   //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
35
Eric Leschinski

$ thisについての別の正確な説明とにかく、私はその古い質問を知っています。 $ thisは、主にクラスのプロパティを参照するために使用されます。

例:

Class A
{
   public $myname;    //this is a member variable of this class

function callme() {
    $myname = 'function variable';
    $this->myname = 'Member variable';
    echo $myname;                  //prints function variable
    echo $this->myname;              //prints member variable
   }
}

出力:

function variable

member variable
14
loyola

他の多くのオブジェクト指向言語と同じように、クラスのインスタンスを内部から参照する方法です。

PHPドキュメント から:

疑似変数$ thisは、オブジェクトコンテキスト内からメソッドが呼び出されたときに使用できます。 $ thisは、呼び出し元オブジェクト(通常、メソッドが属するオブジェクトですが、メソッドがセカンダリオブジェクトのコンテキストから静的に呼び出される場合は別のオブジェクト)への参照です。

8
snicker

$ thisを使用せず、次のコードスニペットで同じ名前のインスタンス変数とコンストラクター引数を使用しようとするとどうなるかを見てみましょう。

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $name = $name;
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

何もエコーしません

<?php

class Student {
    public $name;

    function __construct( $name ) {
        $this->name = $name; // Using 'this' to access the student's name
    }
};

$tom = new Student('Tom');
echo $tom->name;

?>

これは「Tom」をエコーし​​ます

6
user6485832

$this呼び出し元オブジェクトへの参照 (通常はメソッドが属するオブジェクトですが、メソッドがセカンダリオブジェクトのコンテキストから静的に呼び出される場合は別のオブジェクトである可能性があります)。

3
Seyedan

クラスを作成すると、(多くの場合)インスタンス変数とメソッド(別名、関数)があります。 $ thisはこれらのインスタンス変数にアクセスし、関数がこれらの変数を受け取り、必要な処理を実行できるようにします。

mederの例の別のバージョン:

class Person {

    protected $name;  //can't be accessed from outside the class

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

    public function getName() {
        return $this->name;
    }
}
// this line creates an instance of the class Person setting "Jack" as $name.  
// __construct() gets executed when you declare it within the class.
$jack = new Person("Jack"); 

echo $jack->getName();

Output:

Jack
3
cp3

$ thisは特別な変数であり、同じオブジェクトを参照します。自体。

実際に現在のクラスのインスタンスを参照します

上記のステートメントをクリアする例を次に示します

<?php
 class Books {
  /* Member variables */
  var $price;
  var $title;

  /* Member functions */
  function setPrice($par){
     $this->price = $par;
  }

  function getPrice(){
     echo $this->price ."<br/>";
  }

  function setTitle($par){
     $this->title = $par;
  }

  function getTitle(){
     echo $this->title ." <br/>";
  }
}
?> 
2
homi

mederのように、現在のクラスのインスタンスを参照します。

PHP Docs を参照してください。最初の例で説明します。

0
Marc W