Yêu cầu thg 9 17, 2019 1:48 CH 2466 1 3
  • 2466 1 3
0

Hàm khởi tạo PHP Laravel

Chia sẻ
  • 2466 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 CÂU TRẢ LỜI


Đã trả lời thg 9 18, 2019 4:09 SA
Đã được chấp nhận
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.

Chia sẻ
Đã trả lời thg 9 17, 2019 2:01 CH
+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

Chia sẻ
Avatar HuyềnNhư @PhanNhuHuyen
thg 9 18, 2019 2:23 SA

cảm ơn anh

Avatar HuyềnNhư @PhanNhuHuyen
thg 9 25, 2019 2:45 SA
Avatar HuyềnNhư @PhanNhuHuyen
thg 9 25, 2019 2:49 SA

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 ạ

Avatar Vũ Nguyễn @vunguyen10111995
thg 9 25, 2019 10:48 SA
$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.

Đã trả lời thg 9 18, 2019 5:57 SA
+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');
Chia sẻ
Avatar HuyềnNhư @PhanNhuHuyen
thg 9 18, 2019 6:56 SA

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 ạ

thg 9 18, 2019 7:16 SA

@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.

Avatar HuyềnNhư @PhanNhuHuyen
thg 9 18, 2019 7:36 SA

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

thg 9 18, 2019 8:20 SA

@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.

Avatar HuyềnNhư @PhanNhuHuyen
thg 9 18, 2019 9:38 SA

@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 ạ!!!

Avatar HuyềnNhư @PhanNhuHuyen
thg 9 25, 2019 2:58 SA

@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

thg 9 25, 2019 3:17 SA

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.

thg 9 25, 2019 3:22 SA

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.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí