Asked Sep 17th, 2019 1:48 p.m. 2595 1 3
  • 2595 1 3
0

Hàm khởi tạo PHP Laravel

Share
  • 2595 1 3

Mọi người cho em hỏi thế nào là hàm khởi tạo? và khi nào chúng ta dùng hàm khởi tạo? Hàm khởi tạo được sử dụng như thế nào ?

3 ANSWERS


Answered Sep 18th, 2019 4:09 a.m.
Accepted
0

Có một điểm khác biệt trong hàm khởi tạo của Laravel với PHP, đó là Laravel hỗ trợ việc tự động binding object để thực hiện dependency injection, nên khi code rất tiện. kaka.

Share
Answered Sep 17th, 2019 2:01 p.m.
+5

Hàm khởi tạo

Đó chính là constructor trong PHP. Hàm khởi tạo cũng là một hàm bình thường nhưng có điểm đặc biệt là nó luôn luôn được gọi tới khi ta khởi tạo một đối tượng. Nghĩa là bạn có class A và có hàm khởi tạo __construct, thì tất cả các biến trong hàm khởi tạo sẽ được tạo ra khi bạn gọi đến nó. Bạn hãy dùng thử nó để biết tại sao lại dùng hàm này. Trên viblo có rất nhiều tài liệu về hàm tạo, hàm hủy. Mình có 1 số link cho bạn tham khảo. https://viblo.asia/p/lap-trinh-huong-doi-tuong-trong-phpphan-2-bJzKmkePl9N

https://viblo.asia/p/magic-methods-trong-php-4dbZN7bklYM

Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 18th, 2019 2:23 a.m.

cảm ơn anh

+1
| Reply
Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 25th, 2019 2:45 a.m.
Avatar HuyềnNhư @PhanNhuHuyen
Sep 25th, 2019 2:49 a.m.

comtroller.pngmodel.png anh có thể giải thích cho e hiểu vì sao ở đây mình lại dùng hàm khởi tạo không ạ? và cách mà nó gọi tới model? và các giá trị trong hàm _contrucct được không ạ

0
| Reply
Share
Avatar Vũ Nguyễn @vunguyen10111995
Sep 25th, 2019 10:48 a.m.
$this->room = $room

ở đây tức là bạn gán cái $this->room chính là một "tham chiếu" của cái model Room kia. Bạn có thể tìm đọc về Dependency Injection để hiểu về cái chỗ binding này:

(Room $room)

Vì vậy khi bạn gọi $this->room = $room tức là ở đây $this->room chính là cái model Room kìa. và bạn có thể sử dụng các methods của Room.

0
| Reply
Share
Answered Sep 18th, 2019 5:57 a.m.
+2

Hàm khởi tạo trong các ngôn ngữ lập trình hỗ trợ lập trình hướng đối tượng (OOP) nói chung và PHP nói riêng là một hàm được tự động thực thi khi tạo mới một đối tượng qua từ khóa new. Hàm khởi tạo được sử dụng mục đích khởi tạo các giá trị ban đầu cho đối tượng sau khi tạo mới. Trong PHP, khởi tạo có tên là __construct và là một trong các magic method của PHP mặc dù nó cũng ko có tí nào là magic cả. Lưu ý là trong __construct thì không có dùng return nhé bạn!

class Student
{
  protected $name;

  // Đây là hàm khởi tạo, được tự động thực thi khi khởi tạo instance của một class
  public function __construct($name)
  {
    $this->name = $name;
  }
}

$student = new Student('Nguyen Huu Kim');
Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 18th, 2019 6:56 a.m.

protected $name;

// Đây là hàm khởi tạo, được tự động thực thi khi khởi tạo instance của một class public function __construct($name) { $this->name = $name; } Trong hàm khởi tạo anh đưa ra ví dụ thì mình có thể thêm giá trị hay thuộc tính ngoài thuộc tính khai báo trước đó không ạ

0
| Reply
Share
Sep 18th, 2019 7:16 a.m.

@PhanNhuHuyen Có em, arguments là tùy mình định nghĩa nhé. Nhưng mục đích vẫn ko đổi, chỉ là khởi tạo dữ liệu cho các thuộc tính của object đấy.

0
| Reply
Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 18th, 2019 7:36 a.m.

@huukimit dạ em cảm ơn,em mới học oop laravel nên còn ngu ngơ vài thứ @@

0
| Reply
Share
Sep 18th, 2019 8:20 a.m.

@PhanNhuHuyen hihi. Dục tốc bất đạt. Em cứ học chắc các kiến thức cơ bản của PHP cái đã, ví dụ như OOP là điển hình. Lúc ấy tìm hiểu Laravel sẽ nhanh và dễ dàng hiểu hơn nhiều nếu em chưa hiểu những cái căn bản.

0
| Reply
Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 18th, 2019 9:38 a.m.

@huukimit dạ cơ bản php thì e thấy ổn rồi ạ 😄 còn oop em thấy còn mơ hồ quá nên vô làm laravel thấy hơi rối ạ!!!

0
| Reply
Share
Avatar HuyềnNhư @PhanNhuHuyen
Sep 25th, 2019 2:58 a.m.

@huukimit anh có thể giải thích cho e hiểu vì sao ở đây mình lại dùng hàm khởi tạo không ạ? và cách mà nó gọi tới model? và các giá trị trong hàm _contrucct được không ạh !!!comtroller.pngmodel.png

0
| Reply
Share
Sep 25th, 2019 3:17 a.m.

Mình tóm cái váy lại một chút nhé:

  • Bạn chỉ cần nhớ rằng, __construct trong PHP là một constructor. Trong các ngôn ngữ lập trình hướng đối tượng thì constructor luôn luôn được gọi khi bạn thực hiện tạo mới một instance của Class qua từ khóa new. VD:
class Developer
{
  protected $fullName;

  public function __constructor($fullName)
  {
    $this->fullName = $fullName;
  }

  public function getFullName()
  {
    return $this->fullName;
  }
}

// Tạo mới một instance $huukimit và khởi tạo ngay giá trị cho property $fullName = 'Nguyen Huu Kim':
$huukimit = new Developer('Nguyen Huu Kim');

echo $huukimit->getFullName();
  • Cái Room $room bạn thêm vào hàm khởi tạo của Controller, lúc này Laravel lúc tạo một instance cho cái Controller đấy nó sẽ thực hiện như sau:
$room = new Room(..);
$controller = new IndexController($room);

Sau đó nó dùng $controller để gọi vào method tương ứng với route hiện tại. Như bạn thấy, kỹ thuật tự bind arugment như kia được gọi là Dependency Injection nhé! Nó được áp dụng trong cả __constructor của Controller và trong action của Controller và một số chỗ khác nữa.

0
| Reply
Share
Sep 25th, 2019 3:22 a.m.

Qua Dependency Injection thì Laravel tự new Room rồi truyền vào hàm khởi tạo của Controller. Trong hàm khởi tạo của controller bạn gán cái $room được Laravel đưa cho vào một property để có thể sử dụng lại $room trong các method của controller thông qua $this->room.

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.