Câu hỏi Biến $ này có ý nghĩa gì trong PHP?


Tôi thấy biến $this trong PHP tất cả các thời gian và tôi không có ý tưởng những gì nó được sử dụng cho. Tôi chưa từng sử dụng nó và các công cụ tìm kiếm bỏ qua $ và tôi kết thúc với một tìm kiếm cho từ "này".

Ai đó có thể cho tôi biết biến $ này hoạt động như thế nào trong PHP?


76
2017-10-06 03:45


gốc




Các câu trả lời:


Đó là một tham chiếu đến đối tượng hiện tại, nó được sử dụng phổ biến 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' làm thuộc tính của đối tượng được tạo.


101
2017-10-06 03:46



1 cho thuật ngữ "đối tượng hiện tại", vì đó là cách chính xác hơn để mô tả hành vi đôi khi không trực quan của $this. - Alex Barrett
Đã thấy mã ví dụ tương tự trong hướng dẫn OOP KillerPHP :) killerphp.com/tutorials/php-objects-page-1 - Edson


Cách tốt nhất để tìm hiểu về $this biến trong php là hỏi PHP nó là gì. Đừng hỏi chúng tôi, hãy hỏi trình biên dịch:

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

28
2017-12-11 18:23



bạn quên một vài dấu chấm phẩy: D - smileBeda


Tôi biết câu hỏi cũ của nó, dù sao một lời giải thích chính xác khác về $ này. $ này được sử dụng chủ yếu để 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

11
2018-02-24 06:41





Đó 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ả $ this có sẵn   khi một phương thức được gọi từ bên trong một   ngữ cảnh đối tượng. $ this là một tham chiếu   đối tượng 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 là tĩnh từ   bối cảnh của một đối tượng phụ).


8
2017-10-06 03:47





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 cá thể 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 có gì khác 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 vang lên 'Tom'


6
2018-06-19 14:59



Đoạn mã của bạn đều giống hệt nhau hoặc tôi thiếu gì đó? - Demento
@ Demento: có. Tôi đã sửa nó, sử dụng $this trong hàm tạo thứ hai. - Axel Guilmin


khi bạn tạo một lớp mà bạn có (trong nhiều trường hợp) các biến và phương thức của instance (aka. functions). $ này truy cập các biến mẫu đó để các hàm của bạn có thể lấy 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ụ của người trung gian:

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

2
2017-10-06 14:47





$ this là một biến đặc biệt và nó đề cập đến cùng một nghĩa đối tượng. chinh no.

nó thực sự giới thiệu cá thể 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/>";
  }
}
?> 

2
2018-03-26 07:20



hãy giải thích thêm một chút - Neeraj Rathod