Câu trả lời:
Đó là một tham chiếu đến đối tượng hiện tại, nó thường được sử dụng nhất trong mã hướng đối tượng.
Thí dụ:
<?php
class Person {
public $name;
function __construct( $name ) {
$this->name = $name;
}
};
$jack = new Person('Jack');
echo $jack->name;
Điều này lưu trữ chuỗi 'Jack' như một thuộc tính của đối tượng được tạo.
$this
biến trong PHP là thử nó với trình thông dịch trong các ngữ cảnh khác nhau: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 ->
Vì vậy, biến $this
giả có phương thức và thuộc tính của đối tượng hiện tại. Một thứ như vậy rất hữu ích vì nó cho phép bạn truy cập tất cả các biến thành viên và các phương thức thành viên bên trong lớp. Ví dụ:
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
là tham chiếu đến một PHP Object
được tạo bởi trình thông dịch cho bạn, chứa một mảng các biến.
Nếu bạn gọi $this
bên trong một phương thức bình thường trong một lớp bình thường, hãy $this
trả về Đối tượng (lớp) mà phương thức đó thuộc về.
Có thể $this
không được xác định nếu ngữ cảnh không có Đối tượng cha.
php.net có một trang lớn nói về lập trình hướng đối tượng PHP và cách $this
hoạt động tùy thuộc vào ngữ cảnh.
https://www.php.net/manual/en/language.oop5.basic.php
Tôi biết câu hỏi cũ của nó, dù sao thì một lời giải thích chính xác khác về $ này . $ này chủ yếu được sử dụng để chỉ các thuộc tính của một lớp.
Thí dụ:
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
}
}
đầu ra:
function variable
member variable
Nó là cách để tham chiếu một thể hiện của một lớp từ bên trong nó, giống như nhiều ngôn ngữ hướng đối tượng khác.
Từ tài liệu PHP :
Biến giả $ này khả dụng khi một phương thức được gọi từ bên trong ngữ cảnh đối tượng. $ đây là một tham chiếu đến đối tượng đang gọi (thường là đối tượng mà phương thức thuộc về, nhưng có thể là một đối tượng khác, nếu phương thức được gọi tĩnh từ ngữ cảnh của một đối tượng phụ).
Hãy xem điều gì sẽ xảy ra nếu chúng ta không sử dụng $ this và cố gắng có các biến phiên bản và đối số hàm tạo có cùng tên với đoạn mã sau
<?php
class Student {
public $name;
function __construct( $name ) {
$name = $name;
}
};
$tom = new Student('Tom');
echo $tom->name;
?>
Nó không vang vọng gì ngoài
<?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;
?>
điều này vọng lại 'Tom'
$this
trong hàm tạo thứ hai.
$name
là Tom, nhưng bên ngoài hàm, nó không có bất kỳ giá trị nào, bởi vì phạm vi của nó bị giới hạn trong phạm vi của hàm.
khi bạn tạo một lớp, bạn có (trong nhiều trường hợp) các biến cá thể và phương thức (hay còn gọi là. hàm). $ this truy cập các biến cá thể đó để các hàm của bạn có thể nhận các biến đó và làm những gì chúng cần làm bất cứ điều gì bạn muốn với chúng.
một phiên bản khác của ví dụ về 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
là một tham chiếu đến đối tượng đang gọi (thường là đối tượng mà phương thức thuộc về, nhưng có thể là một đối tượng khác, nếu phương thức được gọi tĩnh từ ngữ cảnh của một đối tượng phụ).
$ đây là một biến đặc biệt và nó tham chiếu đến cùng một đối tượng tức là. chinh no.
nó thực sự tham chiếu phiên bản của lớp hiện tại
đây là một ví dụ sẽ xóa câu lệnh trên
<?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/>";
}
}
?>
Đây là lời giải thích chi tiết dài. Tôi hy vọng điều này sẽ giúp ích cho những người mới bắt đầu. Tôi sẽ làm cho nó rất đơn giản.
Đầu tiên, hãy tạo một lớp
<?php
class Class1
{
}
Bạn có thể bỏ qua thẻ đóng php ?>
nếu chỉ sử dụng mã php.
Bây giờ hãy thêm thuộc tính và một phương thức vào bên trong Class1
.
<?php
class Class1
{
public $property1 = "I am property 1";
public $property2 = "I am property 2";
public function Method1()
{
return "I am Method 1";
}
}
Thuộc tính chỉ là một biến đơn giản, nhưng chúng tôi đặt cho nó tên thuộc tính vì nó nằm trong một lớp.
Phương thức chỉ là một hàm đơn giản, nhưng chúng ta nói rằng phương thức này cũng nằm trong một lớp.
Các public
từ khóa có nghĩa là phương pháp hay một tài sản có thể được truy cập bất cứ nơi nào trong kịch bản.
Bây giờ, làm thế nào chúng ta có thể sử dụng các thuộc tính và phương thức bên trong Class1
?
Câu trả lời là tạo một thể hiện hoặc một đối tượng, hãy nghĩ về một đối tượng như một bản sao của lớp.
<?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);
Chúng tôi đã tạo một đối tượng, đó là $object1
bản sao của Class1
tất cả nội dung của nó. Và chúng tôi đã vứt bỏ tất cả các nội dung $object1
sử dụng var_dump()
.
Điều này sẽ cung cấp cho bạn
object(Class1)#1 (2) { ["property1"]=> string(15) "I am property 1" ["property2"]=> string(15) "I am property 2" }
Vì vậy, tất cả nội dung của Class1
đều ở trong $object1
, ngoại trừ Method1
, tôi không biết tại sao các phương thức không hiển thị trong khi kết xuất các đối tượng.
Bây giờ nếu chúng ta chỉ muốn truy cập thì sao $property1
. Nó đơn giản, chúng tôi làm var_dump($object1->property1);
, chúng tôi chỉ thêm ->property1
, chúng tôi chỉ vào nó.
chúng tôi cũng có thể truy cập Method1()
, chúng tôi làm var_dump($object1->Method1());
.
Bây giờ, giả sử tôi muốn truy cập $property1
từ bên trong Method1()
, tôi sẽ làm điều này
<?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());
chúng tôi đã tạo $object2 = new Class1;
bản sao mới của Class1
hoặc có thể nói là một phiên bản. Sau đó, chúng tôi chỉ đến property1
từ$object2
return $object2->property1;
Điều này sẽ in string(15) "I am property 1"
trong trình duyệt.
Bây giờ thay vì làm điều này bên trong Method1()
$object2 = new Class1;
return $object2->property1;
Chúng tôi làm điều này
return $this->property1;
Đối $this
tượng được sử dụng bên trong lớp để tham chiếu đến chính lớp đó.
Nó là một giải pháp thay thế cho việc tạo đối tượng mới và sau đó trả lại nó như thế này
$object2 = new Class1;
return $object2->property1;
Một vi dụ khac
<?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());
Chúng tôi đã tạo 2 thuộc tính chứa các số nguyên và sau đó chúng tôi thêm chúng vào và đưa kết quả vào $this->result
.
Không được quên điều đó đấy
$this->property1
= $property1
=119
chúng có cùng giá trị .. vv
Tôi hy vọng điều đó giải thích ý tưởng.
Chuỗi video này sẽ giúp ích cho bạn rất nhiều trong OOP
https://www.youtube.com/playlist?list=PLe30vg_FG4OSEHH6bRF8FrA7wmoAMUZLv
Nó đề cập đến thể hiện của lớp hiện tại, như meder đã nói.
Xem Tài liệu PHP . Nó được giải thích trong ví dụ đầu tiên.