PHP $ này

Trong PHP, từ khóa self và this được dùng để chỉ các thành viên của lớp trong phạm vi của một lớp. Các thành viên của lớp có thể là biến hoặc hàm. Các từ khóa PHP này khác với hành vi tĩnh của các thành viên lớp

PHP từ khóa này đề cập đến một thành viên không tĩnh của một lớp đối với thể hiện của lớp được tạo. Vì vậy, các giá trị hoặc đối số của các thành viên lớp sẽ được thay đổi dựa trên giá trị mà thể hiện của lớp được tạo

Nếu chúng ta sử dụng từ khóa này mà không có ngữ cảnh đối tượng để chỉ dữ liệu tĩnh, thì lỗi sau sẽ được hiển thị cho trình duyệt

Fatal error: Using $this when not in object context in .. on Line

Vì vậy, chúng ta nên sử dụng từ khóa self ở những nơi như vậy để chỉ các thành viên tĩnh của lớp để tránh lỗi trên. Trong khi sử dụng self để chỉ dữ liệu tĩnh, chúng ta cần sử dụng toán tử phân giải phạm vi. Ví dụ,


Trong mẫu mã trên, chúng tôi đã chỉ ra cách biến tĩnh $menu được gọi là tự từ khóa PHP

Sự khác biệt giữa bản thân PHP và cái này

selfthisthe từ khóa self sẽ không được đặt trước bất kỳ biểu tượng nào; . Nhưng PHP từ khóa này nên được bắt đầu bằng dấu $ trong khi giới thiệu các thành viên của lớp. Toán tử phân giải phạm vi PHP sẽ được sử dụng với từ khóa self. Ví dụ, bản thân. -> biểu tượng được sử dụng với biến $this như chúng ta đã sử dụng với một thể hiện đối tượng để truy cập thuộc tính của đối tượng đó. Ví dụ: $this->It sẽ được sử dụng để chỉ một thành viên tĩnh của một lớp. cái này được sử dụng để truy cập các thành viên không tĩnh với toán tử ->. Bản thân PHP đang đề cập đến các thành viên của lớp, không dành cho bất kỳ trường hợp cụ thể nào; . Tuy nhiên, $this sẽ giới thiệu các thành viên của lớp cho một thể hiện cụ thể của lớp

Ví dụ. PHP tự Vs cái này

Chúng ta hãy xem sự khác biệt trên với một chương trình PHP đơn giản làm ví dụ để biết, các thành viên của lớp được gọi như thế nào với hai từ khóa PHP này

toys_name = $name;
        $this->toys_category = $category;
    }

    public function getToyName()
    {
        return $this->toys_name;
    }

    public function getToyCategory()
    {
        return $this->toys_category;
    }

    public function getToyShop_nonStatic()
    {
        return self::getToyShop();
    }

    public static function getToyShop()
    {
        return self::$shop_name;
    }

    public static function setToyShop($shopname)
    {
        self::$shop_name = $shopname;
    }
}

$objToys = new Toys("Battery Car", "Battery Toys");
$toys_name = $objToys->getToyName();
$toys_category = $objToys->getToyCategory();
echo "
Toy: " . $toys_name . ", Category: " . $toys_category; Toys::$shop_name = "Disney"; $shop_name = Toys::getToyShop(); echo "
Shop Name: " . $shop_name; Toys::setToyShop("ToyShop"); $shopname = Toys::getToyShop_nonStatic(); echo "
Shop Name via non static function: " . $shopname; ?>

Trong chương trình trên, chúng ta có ba biến thành viên cho lớp Đồ chơi. Hai trong số đó là không tĩnh, dự kiến ​​​​sẽ được khởi tạo tự động trong khi tạo các thể hiện của lớp. Và, lớp chỉ chứa một biến tĩnh thường được gọi cho tất cả các phiên bản của lớp

Với các hàm tạo, các biến lớp được tham chiếu bằng cách sử dụng $this, để khởi tạo. Một lần nữa, bằng cách sử dụng biến $this, các biến thành viên đã khởi tạo được tham chiếu cho các getter của lớp được định nghĩa là một hàm thành viên không tĩnh, trả về các giá trị bắt buộc cho một thể hiện của lớp cụ thể

Mặt khác, các thành viên tĩnh được gọi là từ khóa self để trả về giá trị tĩnh của $shop_name bởi hàm thành viên tĩnh getToyShop() của lớp Đồ chơi

Bên ngoài lớp, đầu tiên, chúng tôi đã tạo một thể hiện với hai đối số, để tự động gọi hàm tạo của lớp. Đối với đối tượng hoặc thể hiện này, các hàm thành viên không tĩnh được gọi để nhận giá trị của $toys_name và $toys_category. Bây giờ, các hàm thành viên sử dụng $this để chỉ các giá trị được khởi tạo khi khởi tạo

Và sau đó, các thành viên tĩnh được truy cập từ bên ngoài lớp bằng cách sử dụng chính tên lớp. Tuy nhiên, trong phạm vi lớp, chúng tôi đã sử dụng self để truy cập các thành viên đó. Trong chương trình này, chúng tôi đã truy xuất các giá trị biến tĩnh bằng cách sử dụng hàm thành viên không tĩnh getToyShop_nonStatic(), đồng thời

Sau khi thực hiện chương trình PHP trên, nó sẽ trả về đầu ra sau cho trình duyệt sẽ được hiển thị

PHP hỗ trợ các lớp và các cấu trúc hướng đối tượng khác. Các hàm và biến tĩnh trong các lớp PHP không được liên kết với bất kỳ thể hiện cụ thể nào của lớp (nói cách khác, một đối tượng). Xem sự khác biệt giữa đối tượng và lớp

Thay vào đó, các hàm và biến tĩnh được liên kết với chính định nghĩa lớp. Nói cách khác, tất cả các phiên bản của một lớp chia sẻ cùng một biến tĩnh. Trong ngữ cảnh của một phương thức (hàm) của một lớp, các biến và hàm tĩnh được truy cập bằng cách sử dụng self::. Các phương thức và biến khác được sử dụng trong ngữ cảnh của một đối tượng (một thể hiện) của một lớp, sử dụng this->

Biểu đồ so sánh

self so với biểu đồ so sánh nàyselfthisCó thể được sử dụng trong các hàm tĩnhCóKhôngCó thể tự truy cập biến lớp và phương thức. $this-> (Lưu ý rằng PHP > 5. 3 cho phép sử dụng $this với biến tĩnh sử dụng $this. $foo. $this->foo sẽ vẫn không được xác định nếu $foo là một var tĩnh. ) Cần một đối tượng khởi tạo Không Có

self vs this trong PHP - Ví dụ

class exampleClass
{
    public static $foo;
    public $bar;
    public function regularFunction() { echo $this->bar; }

    public static function staticFunction() { echo self::$foo; }

    public static function anotherStatFn() { self::staticFunction(); }

    public function regularFnUsingStaticVar() { echo self::$foo; }
    
    // NOTE: As of PHP 5.3 using $this::$bar instead of self::$bar is allowed

}

exampleClass::$foo = "Hello";

$obj = new exampleClass();

$obj->bar = "World!";

exampleClass::staticFunction(); /* prints Hello */

$obj->regularFunction(); /* prints World! */

Các hàm tĩnh chỉ có thể sử dụng các biến tĩnh. Các hàm và biến tĩnh được tham chiếu qua self. functionName() hoặc tự. tên biến. Trong ví dụ hiển thị ở trên, các biến tĩnh được tham chiếu với tên lớp (exampleClass. $foo) hoặc, với một self. (bản thân. $foo) khi được sử dụng trong phương thức tĩnh [có tên là staticFunction()] của lớp

Các hàm và biến thông thường của một lớp cần có ngữ cảnh đối tượng để được tham chiếu. Chúng không thể tồn tại nếu không có bối cảnh đối tượng. Bối cảnh đối tượng được cung cấp bởi $this. Trong ví dụ trên, $bar là một biến thông thường và do đó nó được tham chiếu là $obj->bar (trong ngữ cảnh đối tượng có biến obj) hoặc $this->bar (một lần nữa trong ngữ cảnh đối tượng trong một phương thức của đối tượng

self không sử dụng $ trước vì self không bao hàm một biến mà lớp tự xây dựng. $this không tham chiếu đến một biến cụ thể nên nó có $ trước

$this trong PHP là gì?

$đây là từ khóa dành riêng trong PHP đề cập đến đối tượng gọi . Nó thường là đối tượng mà phương thức thuộc về, nhưng có thể là đối tượng khác nếu phương thức được gọi tĩnh từ ngữ cảnh của đối tượng phụ. Từ khóa này chỉ áp dụng cho các phương pháp nội bộ.

Sự khác biệt giữa $this và self trong PHP là gì?

Từ khóa self được sử dụng để chỉ chính lớp hiện tại trong phạm vi của lớp đó trong khi $this được sử dụng để chỉ các biến thành viên và hàm cho một thể hiện cụ thể của một lớp

Mục đích của $this và extends trong PHP là gì?

Định nghĩa và cách sử dụng . Cái này gọi là kế thừa. Một lớp dẫn xuất có tất cả các thuộc tính công khai và được bảo vệ của lớp mà nó được dẫn xuất từ. to derive a class from another class. This is called inheritance. A derived class has all of the public and protected properties of the class that it is derived from.

$$ trong PHP là gì?

Biến PHP $ và $$. $var (đơn đô la) là một biến thông thường có tên var lưu trữ bất kỳ giá trị nào như chuỗi, số nguyên, float, v.v. $$var (đô la kép) là biến tham chiếu lưu trữ giá trị của biến $bên trong nó .