Php tự so với cái này so với tĩnh
Đây là chủ đề thú vị nhất và thường gây nhầm lẫn nhất giữa các nhà phát triển khi làm việc trên bất kỳ dự án nào. Trong hướng dẫn này, chúng ta sẽ bắt đầu hiểu về // OUTPUT 1 1 2 21 trong PHP khi phát triển & sẽ hiểu cách chúng ta có thể sử dụng self & // OUTPUT 1 1 2 21 trong các tình huống khác nhau Show
Vì vậy, câu hỏi cơ bản xuất hiện trong đầu, Như chúng ta biết rằng khi chúng ta tạo bất kỳ lớp nào thì lớp đó chứa các hằng, biến hay còn gọi là “thuộc tính” và hàm hay còn gọi là “phương thức” Trong OOP, để truy cập các thành phần lớp này, chúng ta có thể sử dụng $this OR self trong PHP. Điều đó có nghĩa là, chỉ trong PHP chúng ta mới có thể sử dụng những cách này để kiểm soát các thành phần lớp khác nhau. Điều này có thể khác nhau dựa trên ngôn ngữ lập trình bạn sử dụng Mục lục bản thân là gì. trong PHP?Một lớp có thể chứa sự hợp nhất của các thành viên tĩnh và không tĩnh. Để truy cập các thành viên tĩnh của lớp, chúng tôi sử dụng // OUTPUT 1 1 2 27. Toán tử phân giải phạm vi này còn được gọi là Paamayim Nekudotayim (có nghĩa là dấu hai chấm trong tiếng Do Thái) hoặc nói một cách đơn giản hơn là dấu hai chấm. Các phương thức tĩnh cũng được chỉ định là các hàm toàn cầu được đặt tên Các hàm và biến tĩnh được liên kết với chính lớp đó. Nó có nghĩa là bất kể giá trị mà các biến tĩnh nắm giữ, nó sẽ được chia sẻ giữa tất cả các đối tượng được tạo khác Nói một cách đơn giản, giả sử chúng tôi cập nhật biến tĩnh bằng cách sử dụng // OUTPUT 1 1 2 28, sau đó sử dụng // OUTPUT 1 1 2 29, chúng tôi lại thử truy cập vào cùng một biến tĩnh thì chúng tôi sẽ nhận được cùng một giá trị và ngược lại Hãy xem mã trong hành động- updateBookInfo(1); echo $objBooks->getBookId(); // object 2 $newObjBook = new books; echo $newObjBook->getBookId(); $newObjBook->updateBookInfo(2); // after update echo $objBooks->getBookId(); echo $newObjBook->getBookId(); // OUTPUT 1 1 2 2 Được rồi, vì vậy trong ví dụ này, chúng tôi đã tạo một lớp sách trong đó chúng tôi đã xác định một biến tĩnh ( bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();0) và để truy cập nó, chúng tôi đã xác định phương thức bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();1. Bây giờ, trước hết, chúng ta đã tạo một đối tượng sách và gán giá trị cho một biến tĩnh bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();0 bằng phương thức bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();3 Phương pháp này sử dụng cú pháp bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();4 để cập nhật một biến lớp bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();0. Sau khi được chỉ định, giờ đây nó có thể có sẵn để sử dụng trong và ngoài lớp học Chúng ta có thể truy cập giá trị này bằng cách sử dụng phương thức bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();1 từ bên trong hoặc bên ngoài lớp HOẶC trực tiếp sử dụng lớp ( bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();7) từ bên ngoài lớp Tiếp theo, chúng ta đã định nghĩa một đối tượng khác // OUTPUT 1 1 2 29. Bây giờ, chúng ta sẽ nhận được cùng một giá trị của bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();0 khi sử dụng đối tượng này vì thuộc tính của biến cấp độ lớp Một lần, chúng tôi cập nhật giá trị của biến tĩnh này bằng cách sử dụng bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();3 e. g. , 2 trong trường hợp của chúng tôi, thì giá trị đó sẽ có sẵn cho tất cả các đối tượng (bao gồm các đối tượng hiện tại, tiếp theo và trước đó) Vì vậy, // OUTPUT 1231 & // OUTPUT 1232 sẽ cho cùng một giá trị i. e. , 2 Làm thế nào chúng ta có thể truy cập các thành viên tĩnh của lớp?Vì vậy, chúng ta đã hiểu cơ bản về cách định nghĩa các biến tĩnh, cách chúng ta có thể truy cập nó và cách tất cả các thể hiện của một lớp chia sẻ cùng một biến tĩnh. Có nhiều cách khác nhau để chúng ta có thể truy cập biến tĩnh Vì vậy, các biến & hàm tĩnh được truy cập thông qua // OUTPUT 1233 & // OUTPUT 1234 tương ứng (từ bên trong lớp). Trong ví dụ hiển thị ở trên, một biến tĩnh được truy cập bằng cách sử dụng // OUTPUT 1235 khi chúng ta ở trong lớp Nhưng từ bên ngoài lớp, chúng ta cần sử dụng bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId();7 vì biến tĩnh là biến cấp độ lớp. Vì vậy, không cần tạo một đối tượng lớp để truy cập các biến tĩnh của nó. Chúng ta có thể truy cập trực tiếp nó thông qua className sau đó toán tử phân giải phạm vi ( // OUTPUT 1 1 2 27 ) theo sau là tên biến Đôi khi chúng ta cũng thấy từ khóa // OUTPUT 1238 có nhiệm vụ truy cập các phương thức của lớp cha. Cú pháp này thường được tìm thấy bên trong phương thức như // OUTPUT 1239 nơi chúng ta đưa nó vào dòng đầu tiên bên trong một hàm để kế thừa tất cả dữ liệu hàm tạo của lớp cha. Chúng ta cũng có thể sử dụng parent. trong các phương pháp khác là tốt. Nhưng sự thật là không có mối quan hệ như vậy giữa bản thân. & cha mẹ $this trong PHP là gì?// OUTPUT 1 1 2 21 đại diện cho tham chiếu đến đối tượng hiện tại của lớp. // OUTPUT 1 1 2 21 là biến giả được tạo ngay khi đối tượng của lớp được tạo và có sẵn để sử dụng khi phương thức lớp đó được gọi từ bên trong ngữ cảnh đối tượng Hãy hiểu $this bằng cách sử dụng ví dụ cơ bản- bookId = $id; } public function getBookId() { return $this->bookId; } } $objBook = new books; $objBook->setBookId(123); echo $objBook->getBookId(); // OUTPUT 123 Như chúng ta có thể thấy, chúng ta đã định nghĩa hai phương thức trong lớp bookId = $id; } public function getBookId() { return $this->bookId; } public function getCurrentObjInfo() { print_r($this); } } $objBook = new books; $objBook->setBookId(123); $objBook->name = "Jack"; echo $objBook->getCurrentObjInfo();2 và một phương thức được sử dụng để đặt bookId và một phương thức khác được sử dụng để lấy bookId. Đối với điều này, chúng tôi đã sử dụng biến // OUTPUT 1 1 2 21 vì chúng tôi ở trong lớp và chúng tôi đang xử lý các biến không tĩnh của lớp từ bên trong ngữ cảnh đối tượng Vậy, // OUTPUT 1 1 2 21 chứa gì? // OUTPUT 1 1 2 21 chứa tất cả các thuộc tính có sẵn trong lớp. Có thể có một quan niệm sai lầm rằng khi chúng ta in // OUTPUT 1 1 2 21 thì nó sẽ đưa ra danh sách tất cả các thành viên trong phạm vi của lớp Nhưng điều này là không đúng sự thật. // OUTPUT 1 1 2 21 sẽ in tất cả các biến hiện có và biến mới được liên kết với chính lớp đó Vâng đó là sự thật. Chúng ta cũng có thể tự động thêm (các) biến mới để sử dụng tạm thời cho lớp. Bây giờ bạn có thể bối rối vì chúng ta đã thấy rất nhiều ví dụ có chứa việc sử dụng các thuộc tính được định nghĩa trong lớp Hãy sử dụng cùng một ví dụ về lớp sách và xác định các biến động được xác định bên ngoài lớp bookId = $id; } public function getBookId() { return $this->bookId; } public function getCurrentObjInfo() { print_r($this); } } $objBook = new books; $objBook->setBookId(123); $objBook->name = "Jack"; echo $objBook->getCurrentObjInfo(); // OUTPUT books Object ( [bookId] => 123 [name] => Jack ) Chúng tôi đã định nghĩa một phương thức mới bookId = $id; } public function getBookId() { return $this->bookId; } public function getCurrentObjInfo() { print_r($this); } } $objBook = new books; $objBook->setBookId(123); $objBook->name = "Jack"; echo $objBook->getCurrentObjInfo();8 và bên trong nó, chúng tôi đã in đối tượng hiện tại bằng cách truyền tham số // OUTPUT 1 1 2 21. Tại dòng số 22, chúng tôi đã xác định một biến mới và gán nó cho đối tượng // OUTPUT books Object ( [bookId] => 123 [name] => Jack )0 Vì vậy, khi chúng tôi gọi phương thức mới này là bookId = $id; } public function getBookId() { return $this->bookId; } public function getCurrentObjInfo() { print_r($this); } } $objBook = new books; $objBook->setBookId(123); $objBook->name = "Jack"; echo $objBook->getCurrentObjInfo();8 thì nó sẽ không chỉ in các biến hiện có mà còn cả các biến động mới được xác định Bây giờ, hãy thảo luận về chủ đề chính Khi nào sử dụng bản thân. trong PHP?Đây là câu hỏi lớn nhất mà mọi người phải đối mặt khi phát triển bất kỳ phần mềm nào. Những phương thức/thuộc tính lớp nào nên là tĩnh và TẠI SAO? Ở phần trên, chúng ta đã thấy rằng // OUTPUT 1 1 2 21 đại diện cho tham chiếu đến đối tượng hiện tại của lớp, trong khi self tham chiếu đến chính lớp hiện tại Để hiểu điều này, hãy tạo một lớp người và sau đó chúng ta sẽ thấy việc sử dụng các thuộc tính/phương thức tĩnh có thể hữu ích như thế nào name = $name; $this->age = $age; $this->height = $address; $this->weight = $familyMembers; } public function get_name() { return $this->name; } public function get_age() { return $this->age; } public function get_address() { return $this->address; } public function get_family_members() { return $this->familyMembers; } public static function set_voting_age($age) { self::$votingAge = $age; } public static function get_voting_age() { return self::$votingAge; } } Vì vậy, về cơ bản chúng ta đã định nghĩa lớp Person và cũng đã thêm bốn thuộc tính name, age, address & familyMembers Sau đó, chúng tôi đã tạo biến bỏ phiếu tĩnhAge vì khai báo bỏ phiếuAge tĩnh, chúng tôi đảm bảo rằng mọi đối tượng được tạo bằng cách sử dụng lớp Person phải chứa cùng một giá trị bỏ phiếu tĩnhAge Điều này là để chúng tôi đảm bảo rằng ngay cả khi chúng tôi tạo ra càng nhiều đối tượng thuộc lớp người càng tốt nhưng tất cả các đối tượng sẽ có cùng độ tuổi biểu quyết Một ưu điểm khác của việc tạo thuộc tính tĩnh HOẶC biến phương thức // OUTPUT books Object ( [bookId] => 123 [name] => Jack )3 thành tĩnh là chúng ta không cần tạo đối tượng lớp Person để truy cập giá trị mặc định củavotingAge. Chúng tôi có thể truy cập trực tiếp bằng cách sử dụng // OUTPUT books Object ( [bookId] => 123 [name] => Jack )4 Khi nào nên sử dụng $this trong PHP?Ngược lại với khi sử dụng self. trong PHP, sử dụng $this chỉ hữu ích khi chúng ta thực sự cần tạo một đối tượng của lớp để định nghĩa và truy cập các thành viên không tĩnh của lớp $this chỉ sử dụng bên trong các phương thức của lớp. Vì vậy, một khi đối tượng của lớp (e. g. , Person) được tạo sau đó để truy cập tất cả các thành viên chúng ta cần sử dụng biến giả $this name = $name; } public function get_name() { return $this->name; } Chúng tôi đã rút gọn ví dụ trên và chỉ sử dụng hàm get_name() để truy cập tên của người đó. Vì tên thuộc tính này có thể có tên khác tùy thuộc vào giá trị được truyền cho hàm tạo Vì vậy, để truy cập thuộc tính này, chúng ta cần sử dụng biến $this Tóm lại, hãy xem sự khác biệt giữa bản thân. và $này Sự khác biệt giữa self và $this trong PHPself$thisself tham chiếu đến chính lớp hiện tại$this biểu thị tham chiếu đến đối tượng hiện tại của lớpKhông cần khởi tạo một đối tượng để truy cập các thành viên tĩnh Cần tạo đối tượng để truy cập các phương thức và các biến. được sử dụng để truy cập các biến/phương thức tĩnh của lớp$cái này được sử dụng để truy cập các biến/phương thức không tĩnh của lớpPhần kết luậnChúng ta đã thấy sự hiểu biết sâu sắc về self và $this trong PHP. Vì vậy, về cơ bản, chúng ta cần đảm bảo rằng trong khi tạo bất kỳ lớp nào, mục đích của lớp này là gì và các thành phần khác nhau của lớp sẽ giúp lớp đó hoàn thiện như thế nào. Khi chúng tôi đưa ra quyết định cuối cùng thì chúng tôi có thể sử dụng một cách thích hợp khi nào nên sử dụng self và khi nào nên sử dụng $this Sự khác biệt giữa bản thân và tĩnh trong PHP là gì?bản thân Vs tĩnh. Sự khác biệt cơ bản nhất giữa chúng là self trỏ đến phiên bản của thuộc tính của lớp mà nó được khai báo nhưng trong trường hợp tĩnh, thuộc tính sẽ được khai báo lại khi chạy.
Bản thân có giống với PHP này không?Bản thân và đây là hai toán tử khác nhau được sử dụng để biểu thị lớp hiện tại và đối tượng hiện tại tương ứng. self được sử dụng để truy cập các biến hoặc phương thức tĩnh hoặc lớp và this được sử dụng để truy cập các biến hoặc phương thức không tĩnh hoặc đối tượng.
Sự khác biệt giữa cái này và tĩnh trong PHP là gì?tĩnh. TEST có thể được sử dụng bên trong một phương thức tĩnh, trong khi $this. KIỂM TRA yêu cầu một phiên bản trước khi được sử dụng (vì vậy không thể sử dụng được trong các phương thức tĩnh).
Sự khác biệt giữa bản thân và tĩnh là gì?Khi bạn sử dụng self trong lớp Foo để chỉ thuộc tính, bạn đang tham chiếu đến cùng một lớp. Khi bạn gọi một phương thức qua static , bạn đang gọi một tính năng gọi là liên kết tĩnh muộn (được giới thiệu trong PHP 5. 3). Trong trường hợp trên, sử dụng self sẽ dẫn đến Foo. thanh $ (1234). |