回答:
現在のオブジェクトへの参照であり、オブジェクト指向のコードで最も一般的に使用されます。
例:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
これは、作成されたオブジェクトのプロパティとして 'Jack'文字列を格納します。
$this
PHPで変数について学ぶ最良の方法は、さまざまなコンテキストでインタープリターに対してそれを試すことです:print isset($this); //true, $this exists
print gettype($this); //Object, $this is an object
print is_array($this); //false, $this isn't an array
print get_object_vars($this); //true, $this's variables are an array
print is_object($this); //true, $this is still an object
print get_class($this); //YourProject\YourFile\YourClass
print get_parent_class($this); //YourBundle\YourStuff\YourParentClass
print gettype($this->container); //object
print_r($this); //delicious data dump of $this
print $this->yourvariable //access $this variable with ->
したがって、$this
疑似変数にはCurrent Objectのメソッドとプロパティがあります。このようなことは、クラス内のすべてのメンバー変数とメンバーメソッドにアクセスできるので便利です。例えば:
Class Dog{
public $my_member_variable; //member variable
function normal_method_inside_Dog() { //member method
//Assign data to member variable from inside the member method
$this->my_member_variable = "whatever";
//Get data from member variable from inside the member method.
print $this->my_member_variable;
}
}
$this
Object
変数の配列を含む、インタプリタによって作成されたPHPへの参照です。
$this
通常のクラスの通常のメソッド内で呼び出す$this
と、そのメソッドが属するオブジェクト(クラス)が返されます。
$this
コンテキストに親オブジェクトがない場合は、未定義になる可能性があります。
php.netには、PHPオブジェクト指向プログラミングと$this
、コンテキストに応じてどのように動作するかを説明する大きなページがあります。
https://www.php.net/manual/en/language.oop5.basic.php
私はその古い質問を知っています、とにかく$ 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
$ 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;
?>
これは「トム」をエコーします
$this
2番目のコンストラクターを使用して修正しました。
$name
はトムですが、関数の範囲は関数のスコープに制限されているため、関数の外部には値がありません。
クラスを作成するとき、(多くの場合)インスタンス変数とメソッド(別名関数)があります。$ 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
$this
ある呼び出し元のオブジェクトへの参照は、(メソッドが属する通常のオブジェクトが、おそらく他の目的は、この方法は、二次オブジェクトのコンテキストから静的に呼び出された場合)。
$ 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/>";
}
}
?>
これは長い詳細な説明です。これが初心者に役立つことを願っています。とても簡単にします。
まず、クラスを作成しましょう
<?php
class Class1
{
}
?>
phpコードのみを使用している場合は、php終了タグを省略できます。
次に、プロパティとメソッドを内に追加しますClass1
。
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
プロパティは単純な変数ですが、クラス内でプロパティにcuzという名前を付けています。
メソッドは単純な関数ですが、メソッドcuzもクラス内にあります。
の public
メソッドまたはプロパティはどこにでもスクリプトでアクセスすることができることを意味するキーワード。
ここで、内部でプロパティとメソッドを使用する方法 Class1
か?
答えは、インスタンスまたはオブジェクトを作成することです。オブジェクトをクラスのコピーと考えてください。
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
$object1 = new Class1;
var_dump($object1);
すべてのコンテンツを$object1
含むのコピーであるオブジェクトを作成しましたClass1
。そして、の$object1
使用内容をすべてダンプしましたvar_dump()
。
これはあなたに与えるでしょう
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
オブジェクトのダンプ中にメソッドが表示されない理由を除いて、すべての内容はにClass1
あります。$object1
Method1
次に、アクセス$property1
のみを行う場合はどうでしょうか。その単純な、私たちはvar_dump($object1->property1);
、私たちは追加しました->property1
、私たちはそれを指摘しました。
アクセスもできMethod1()
ますvar_dump($object1->Method1());
。
ここで$property1
、内部からアクセスしたいMethod1()
とします。これを行います
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
$object2 = new Class1;
return $object2->property1;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
の$object2 = new Class1;
新しいコピーでClass1
あるインスタンスを作成したか、インスタンスと言うことができます。次にproperty1
、$object2
return $object2->property1;
これはstring(15) "I am property 1"
ブラウザで印刷されます。
これを内部で行う代わりに Method1()
$object2 = new Class1;
return $object2->property1;
これをします
return $this->property1;
$this
オブジェクトは、クラス自体を参照するためにクラス内で使用されています。
新しいオブジェクトを作成し、それをこのように返すための代替手段です
$object2 = new Class1;
return $object2->property1;
もう一つの例
<?php
class Class1
{
public $property1 = 119;
public $property2 = 666;
public $result;
public function Method1()
{
$this->result = $this->property1 + $this->property2;
return $this->result;
}
}
$object1 = new Class1;
var_dump($object1->Method1());
整数を含む2つのプロパティを作成し、それらを追加して結果をに入れました$this->result
。
その事を忘れるな
$this->property1
= $property1
=119
それらは同じ値を持っています.. etc
これで説明がつくといいのですが。
この一連のビデオは、OOPで大いに役立ちます
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
mederが言ったように、それは現在のクラスのインスタンスを参照します。
PHPドキュメントを参照してください。最初の例で説明されています。