Hướng dẫn php __invoke vs __construct - php __invoke so với __construct

Trên bộ điều khiển tài nguyên của tôi, tôi có các phương thức thông thường,

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
2
public function __invoke()
    {
        return new UserResource(auth()->user());
    }
3
public function __invoke()
    {
        return new UserResource(auth()->user());
    }
4, v.v.

Tôi cũng có một

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
5 quản lý phần mềm trung gian và ủy quyền như vậy:

public function __construct()
    {
        $this->middleware('auth:sanctum')->only(['index', 'update', 'destroy']);
        $this->authorizeResource(User::class, 'user');
    }

Trong các dịp khác, chẳng hạn như trong các bộ điều khiển phương thức đơn, tôi chỉ sử dụng

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
6:

public function __invoke()
    {
        return new UserResource(auth()->user());
    }

Nếu tôi muốn thêm phần mềm trung gian và chính sách xác thực, tôi có nên thêm nó vào phương thức

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
6 hoặc sử dụng phương thức
public function __invoke()
    {
        return new UserResource(auth()->user());
    }
5 riêng biệt theo tài nguyên của tôi Contoller chi tiết ở trên không?

Hỏi ngày 10 tháng 4 lúc 12:11Apr 10 at 12:11

Hướng dẫn php __invoke vs __construct - php __invoke so với __construct

1

Một phương thức cấu trúc được thực thi khi một thể hiện đối tượng mới được tạo, tức là khi

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
9 được gọi. Ngược lại, phương thức ma thuật
0 chỉ được gọi khi mã đang cố gọi một đối tượng là hàm (xem Gọi lại / Loại có thể gọi được).

Chỉnh sửa: Trong bối cảnh của Laravel / Bộ điều khiển hành động đơn: Phần mềm trung gian (bao gồm cả các bộ điều khiển được xác định bởi bộ điều khiển) được thu thập trước khi tuyến đường được chạy (nghĩa là

1 được gọi). Điều này có nghĩa là phần mềm trung gian được thêm vào trong phương thức
1 sẽ không được chạy. Bằng chứng của bánh pudding là trong việc ăn uống ... hãy thử nó.
In the context of Laravel / single action controllers: Middleware (including those defined by the controller) are gathered before the route is run (i.e.
1 is called). This means middleware added within the
1 method will not be run. The proof of the pudding is in the eating... Try it out.

Đã trả lời ngày 10 tháng 4 lúc 12:20Apr 10 at 12:20

Zoli Szabózoli SzabóZoli Szabó

4.2311 Huy hiệu vàng12 Huy hiệu bạc19 Huy hiệu đồng1 gold badge12 silver badges19 bronze badges

2

Bạn có thể sử dụng đồng thời __construct và __invoke. Tôi nghĩ rằng bạn có thể sử dụng phương pháp __Construct cho mục đích đó.

Đã trả lời ngày 10 tháng 4 lúc 12:20Apr 10 at 12:20

1

Bài này chúng ta sẽ tập trung tìm hiểu về 2 magic methods là __toString và invoke() trong PHP.

Nội dung chính ShowShow

  • 1, __toString().
  • 2, __invoke().
  • 3, Lời kết.
  • Đánh giá bài viết
  • Magic Methods Trong PHP
  • 1. Magic methods là gì.
  • 2. Ưu nhược điểm của magic methods.
  • 3, Các magic method trong PHP.
  • +__construct():
  • + __destruct():
  • + __isset():
  • + __unset():
  • + __call():
  • + __callstatic():
  • + __toString():
  • + __invoke():
  • + __Sleep():
  • + __wakeup:
  • + __set_state():
  • + __clone():
  • + __debugInfo():
  • 4. kết luận.
  • 5. Tài liệu tham khảo.

1, __toString().

2, __invoke().

3, Lời kết.:

public function __toString()
{
    //code
}

VD::

Đánh giá bài viết

Magic Methods Trong PHP

2, __invoke().

3, Lời kết.

3, Lời kết.:

public function __invoke(arguments)
{
    //code
}

Đánh giá bài viết: arguments là các tham số các bạn muốn truyền vào, nếu không truyền gì vào thì bỏ trống.

VD::

Magic Methods Trong PHP

1. Magic methods là gì.

2. Ưu nhược điểm của magic methods.

3, Các magic method trong PHP.

name;
        }
    }
}

$congnuoi = new ConNguoi();
$congnuoi('name');
//Kết quả: Vũ Thanh Tài

3, Lời kết.

Đánh giá bài viếtmagic methods __toString() và  __invoke() trong PHP rồi, phần tiếp theo chúng ta sẽ tìm hiểu về __set_state() và __debugInfo().

Magic Methods Trong PHP

1. Magic methods là gì.

2. Ưu nhược điểm của magic methods.

  1. 3, Các magic method trong PHP.
  2. + __destruct():
  3. + __isset():

+ __unset():

+ __call():

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
0

+ __callstatic():

+ __toString():

+ __invoke():

+ __Sleep():

-Phương thức __toString() sẽ được gọi khi chúng ta dùng đối tượng như một string.LIKE trên trang Facebook Chung Nguyễn Blog nhé! Mãi yêu các bạn!

Cú pháp:

Đánh giá bài viết

+ __isset():

+ __unset():/5 0 votes

Magic Methods Trong PHP

1. Magic methods là gì.

2. Ưu nhược điểm của magic methods.

3, Các magic method trong PHP.

  • Magic Methods Trong PHP
  • 1. Magic methods là gì.
  • 2. Ưu nhược điểm của magic methods.
  • 3, Các magic method trong PHP.
  • +__construct():
  • + __destruct():
  • + __isset():
  • + __unset():
  • + __call():
  • + __callstatic():
  • + __toString():
  • + __invoke():
  • + __Sleep():
  • + __wakeup:
  • + __set_state():
  • + __clone():
  • + __debugInfo():
  • 4. kết luận.
  • 5. Tài liệu tham khảo.

2. Ưu nhược điểm của magic methods.

3, Các magic method trong PHP.
Ưu điểm
Từ khái niệm ở trên chúng ta có thể thấy được ưu điểm của magic methods :
• Giúp cho chúng ta tùy biến được các hành vi, thêm cách lựa chọn để xử lý một đối tượng trong php.
• Nó giúp cho chúng ta có thể thao tác với một đối tượng theo cách mình muốn.
Nhược điểm
Từ khái niệm ở trên chúng ta có thể thấy được ưu điểm của magic methods :
• Giúp cho chúng ta tùy biến được các hành vi, thêm cách lựa chọn để xử lý một đối tượng trong php.
• Nó giúp cho chúng ta có thể thao tác với một đối tượng theo cách mình muốn.
• Một magic methods có tốc độ chậm hơn các phương thức bình thường.

3, Các magic method trong PHP.

+ __destruct():
-Trong PHP hiện nay có 15 hàm magic methods :

+__construct():

+ __isset():
Trong php thì magic method __construct() rất là phổ biến mà chúng ta hay thường gặp nhất. Hàm __construct() sẽ tự đông được gọi khi ta khởi tạo 1 đối tượng( còn được gọi là hàm khởi tạo).

Không giống như các ngôn ngữ lập trình hướng đối tượng như java hay C#. Trong PHP, hàm khởi tạo không cho phép chúng ta thực hiện việc overload, nó chỉ cho phép khởi tạo 1 đối tượng duy nhất ứng với method __contructs() được khai báo trong class(không khai báo mặc định là không truyền gì). Ví dụ :
Ví dụ :

Chúng ta thấy nó không thể khải tạo được biến thứ 2 do method __contruct() ta có tham số truyền vào.

Để khắc phục việc không cho overload, trong php có tùy biến như sau :

+ __destruct():

được gọi khi một đối tượng bị hủy. Mặc định khi kết thúc chương trình hoặc khi ta khai báo mới đối tượng đó sẽ bị hủy bỏ và gọi đến method __destruct().

Như trên ví dụ ta có thể thấy đối tượng tạo trước sẽ bị hủy sau khi chương trình kết thúc.

+ __set():

gọi khi ta truyền dữ liệu vào thuộc tính không tồn tại hoặc thuộc tính private trong đối tượng.

Nó truyền dưới dạng key => value. Như ở ví dụ trên, ta set giá trị cho thuộc tính name mà không tồn tại trong class. Nó sẽ gọi đến hàm __set() với $key là thuộc tính đã gọi, $value là giá trị đã gán. Kết quả:
Kết quả:

+ __get():

gọi khi ta truy cập vào thuộc tính không tồn tại hoặc thuộc tính private trong đối tượng. Tương tự như set, get là việc xử lý khi truy cập đối tượng.

+ __isset():

-Phương thức __isset() sẽ được gọi khi chúng ta thực hiện kiểm tra một thuộc tính không được phép truy cập của một đối tượng, hay kiểm tra một thuộc tính không tồn tại trong đối tượng đó. Cụ thể là hàm isset() và hàm empty(). -Chú ý: phương thức __isset() không sử dụng được với thuộc tính tĩnh.

+ __unset():

được gọi khi hàm unset() được sử dụng trong một thuộc tính không được phép truy cập. Tương tự như hàm isset. Khi ta Unset 1 thuộc tính không tồn tại thì method __unset() sẽ được gọi.

+ __call():

được gọi khi ta gọi một phương thức không được phép truy cập trong phạm vi của một đối tượng. Như vậy thì có thể thấy __get() và __call() cũng gần giống nhau. Có điều __get() gọi khi không có thuộc tính còn __call() khi phương thức không có. Ta cũng có thể dùng hàm __call() để thực hiện overload trong php. Khai báo : __call($method_name, $parameter) Trong đó:
Ta cũng có thể dùng hàm __call() để thực hiện overload trong php.
Khai báo : __call($method_name, $parameter)
Trong đó:

public function __invoke()
    {
        return new UserResource(auth()->user());
    }
1

Chúng ta có thể thấy trong class test không hề có hàm overloadFunction. Khi ta gọi tới phương thức overloadFunction thì nó sẽ chạy hàm __call().

+ __callstatic():

Được kích hoạt khi ta gọi một phương thức không được phép truy cập trong phạm vi của một phương thức tĩnh.

Kết quả:

+ __toString():

Phương thức này được gọi khi chúng ta in echo đối tượng. Method __toString() sẽ bắt buộc phải trả về 1 dãy String.

+ __invoke():

Phương thức này được gọi khi ta cố gắng gọi một đối tượng như một hàm.

+ __Sleep():

Được gọi khi serialize() một đối tượng. Thông thường khi chúng ta serialize() một đối tượng thì nó sẽ trả về tất cả các thuộc tính trong đối tượng đó. Nhưng nếu sử dụng __sleep() thì chúng ta có thể quy định được các thuộc tính có thể trả về.

+ __wakeup:

Được gọi khi unserialize() đối tượng.

+ __set_state():

Được sử dụng khi chúng ta var_export một object.

+ __clone():

Được sử dụng khi chúng ta clone(sao chép 1 đối tượng thành 1 đối tượng hoàn toàn mới không liên quan đến đối tượng cũ) một object.

+ __debugInfo():

Được gọi khi chúng ta sử dụng hàm vardump().

4. kết luận.

Trên là tổng quan về magic methods và cách sử dụng chúng. Việc sử dụng magic methods khá là hữu ích nhưng chúng ta cũng không lên lạm dụng vì nó chậm hơn methods thường.

5. Tài liệu tham khảo.

https://toidicode.com/magic-methods-trong-php-106.html http://php.net/manual/en/
http://php.net/manual/en/