__lấy php

Trong bài đăng này, tôi sẽ hướng dẫn bạn một số khái niệm về PHP được sử dụng làm phần xây dựng cơ bản của Laravel framework

phương pháp __get

Phương thức ma thuật được sử dụng trong trường hợp bạn muốn cung cấp khả năng truy cập thuộc tính không tồn tại của đối tượng. Vì vậy, câu hỏi là những gì sẽ được trả lại? . Trong khuôn khổ của Laravel, chúng tôi đang sử dụng nó để cho phép một cách linh hoạt

$users = User::all()
0 một thể hiện của một ràng buộc đã đăng ký. Việc thực hiện nó là

public function __get($key)
{
    return $this[$key];
}

Đoạn mã có thể được đọc như vậy, Nếu tôi gọi

$users = User::all()
1, đối tượng
$users = User::all()
2 không có thuộc tính
$users = User::all()
3, vì vậy phương thức ma thuật
$users = User::all()
4 sẽ được gọi

Tiếp theo là tính năng

$users = User::all()
5 diễn ra, chúng ta đang truy cập một đối tượng như thể nó là một mảng. Điều đó có nghĩa là phương thức sẽ được gọi. Ở cuối ngăn xếp cuộc gọi chức năng, những gì chúng tôi sẽ nhận được là phiên bản của ràng buộc
$users = User::all()
6 đã đăng ký

phương thức __callStatic()

Phương thức này được gọi khi chúng ta cố gắng gọi một phương thức không tồn tại trong ngữ cảnh tĩnh (không tồn tại không chỉ có nghĩa là không xác định mà còn có nghĩa là không hiển thị do khai báo khả năng hiển thị như riêng tư, được bảo vệ)

Đây là một trong những ví dụ điển hình nhất cho điều đó xứng đáng được gọi là "Phép thuật". Đối với tất cả các nhà phát triển Laravel ngoài kia, tất cả chúng ta đều quen thuộc với một loại ma thuật phụ thuộc rất nhiều vào phương thức ma thuật này. Ví dụ

$users = User::all()

Chúng tôi đang gọi phương thức

$users = User::all()
7 thông qua lớp
$users = User::all()
8 là một mô hình, nói cách khác, chúng tôi đang gọi phương thức
$users = User::all()
7 trong ngữ cảnh tĩnh. Và chúng ta cũng nhận thấy, lớp
$users = User::all()
8 không có phương thức
$users = User::all()
7, cũng như lớp cha của nó,
public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
2. Vì vậy, những gì chính xác đang được gọi ở đây?

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}

Phương thức __callStatic này làm gì là khởi tạo một phiên bản mới của lớp

$users = User::all()
8 thông qua lớp
public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
5 (không phải lớp
public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
2, bạn có thể muốn tra cứu từ khóa
public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
7 để biết thêm về cách thức hoạt động của nó). Và sau đó, gọi phương thức
$users = User::all()
7 trên phiên bản mới đó

Vì vậy, bây giờ, đây là

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}
9 lượt phương thức, hãy xem nó hoạt động như thế nào

phương thức __call()

Phương thức __call() khá giống với phương thức __callStatic(), điểm khác biệt duy nhất là ngữ cảnh cuộc gọi. Phương thức này được gọi trong ngữ cảnh đối tượng. Đừng nhầm lẫn, được gọi trong bối cảnh đối tượng chỉ đơn giản là được gọi thông qua một thể hiện, không phải thông qua tên lớp

Ví dụ

$person = new Person;
$person->talk();

Phương thức

$person = new Person;
$person->talk();
0 được gọi trong ngữ cảnh đối tượng vì trong ví dụ này,
$person = new Person;
$person->talk();
1 là một đối tượng (hoặc thể hiện giống nhau)

Tiếp tục với ví dụ trên, khi

$person = new Person;
$person->talk();
2 được xử lý bởi
$person = new Person;
$person->talk();
3, nó bắt đầu gọi
$users = User::all()
7 trên user instance mới tạo. Nhưng đối tượng Người dùng cũng không có phương thức
$users = User::all()
7. Đây là lúc phương pháp
$person = new Person;
$person->talk();
6 diễn ra

public function __call($method, $parameters)
{
    if (in_array($method, ['increment', 'decrement'])) {
        return $this->$method(...$parameters);
    }
    return $this->forwardCallTo($this->newQuery(), $method, $parameters);
}

Tôi sẽ không đi sâu vào chi tiết về việc triển khai phương pháp

$person = new Person;
$person->talk();
6 này. Chỉ để cho bạn thấy cách chúng tôi xâu chuỗi
$person = new Person;
$person->talk();
3 và
$person = new Person;
$person->talk();
6 để thực hiện các chức năng truy vấn mà bạn có thể thấy rất kỳ diệu

Phần kết luận

Hy vọng bài đăng này cung cấp cho bạn thêm một số thông tin về cách thức hoạt động của các phương pháp kỳ diệu này và cách chúng được sử dụng trong thực tế. Cũng có một số ý tưởng về cách một số tính năng của Laravel hoạt động ẩn. Hẹn gặp lại các bạn trong bài viết tiếp theo. Hòa bình

__ get trong PHP là gì?

Từ hướng dẫn sử dụng PHP. __set() được chạy khi ghi dữ liệu vào các thuộc tính không thể truy cập. __get() được dùng để đọc dữ liệu từ các thuộc tính không thể truy cập .

Làm cách nào để sử dụng set và get trong PHP?

Trong PHP __set() được sử dụng khi một giá trị được gán cho một biến không xác định của một lớp và __get() được sử dụng khi giá trị từ một biến không xác định là để . __set() được chạy khi ghi dữ liệu vào các thuộc tính không thể truy cập. Phương thức ma thuật __get() đọc dữ liệu từ các thuộc tính không thể truy cập. $user = new MyClass();. The __set() is run when writing data to inaccessible properties. The __get() magic method reads data from inaccessible properties. $user = new MyClass();

Làm cách nào để sử dụng __ gọi trong PHP?

Phương thức __invoke() được gọi khi tập lệnh cố gắng gọi một đối tượng dưới dạng hàm . $obj = CallableClass mới;

__ phương thức __ trong PHP là gì?

__FUNCTION__ và __METHOD__ như trong PHP 5. 0. 4 là vậy. __FUNCTION__ chỉ trả về tên của hàm. trong khi __METHOD__ trả về tên của lớp cùng với tên của hàm .