Hàm ma thuật và Tự động tải trong PHP là gì?

Các hàm PHP bắt đầu bằng dấu gạch dưới kép – một “__” – được gọi là các hàm ma thuật [và/hoặc phương thức] trong PHP. Chúng là các hàm luôn được định nghĩa bên trong các lớp và không phải là các hàm độc lập [bên ngoài các lớp]. Các hàm ma thuật có sẵn trong PHP là. __construct[], __destination[], __call[], __callStatic[], __get[], __set[], __isset[], __unset[], __sleep[], __wakeup[], __toString[], __invoke[], __set_state[

Tại sao chúng được gọi là hàm ma thuật?

Định nghĩa của một hàm ma thuật được cung cấp bởi lập trình viên – nghĩa là bạn, với tư cách là lập trình viên, sẽ thực sự viết định nghĩa. Điều quan trọng cần nhớ – PHP không cung cấp các định nghĩa về hàm ma thuật – lập trình viên thực sự phải viết mã xác định chức năng ma thuật sẽ làm gì. Tuy nhiên, các hàm ma thuật sẽ không bao giờ được gọi trực tiếp bởi lập trình viên – thực ra, PHP sẽ gọi hàm 'đằng sau hậu trường'. Đây là lý do tại sao chúng được gọi là các hàm 'ma thuật' - bởi vì chúng không bao giờ được gọi trực tiếp và chúng cho phép lập trình viên thực hiện một số điều khá mạnh mẽ. Bối rối?

Ví dụ về việc sử dụng hàm ma thuật __construct[] trong PHP

Hàm ma thuật được sử dụng phổ biến nhất là __construct[]. Điều này là do kể từ phiên bản PHP 5, phương thức __construct về cơ bản là hàm tạo cho lớp của bạn. Nếu PHP 5 không thể tìm thấy hàm __construct[] cho một lớp nhất định, thì nó sẽ tìm kiếm một hàm có cùng tên với tên lớp – đây là cách viết hàm tạo cũ trong PHP, nơi bạn chỉ định nghĩa một hàm

Bây giờ, đây là một ví dụ về một lớp với hàm ma thuật __construct[]

class Animal {

public $height;      // height of animal  
public $weight;     // weight of animal

public function __construct[$height, $weight] 
{
 $this->height = $height;  //set the height instance variable
 $this->weight = $weight; //set the weight instance variable

}

}

Trong đoạn mã trên, chúng ta có một hàm __construct đơn giản được xác định chỉ đặt chiều cao và trọng lượng của một đối tượng động vật. Vì vậy, giả sử rằng chúng ta tạo một đối tượng của lớp Animal bằng mã này

Animal obj = new Animal[5, 150];

Điều gì xảy ra khi chúng ta chạy đoạn mã trên? . Và đối tượng obj sẽ là một đối tượng thuộc lớp Animal có chiều cao là 5 và trọng lượng là 150. Vì vậy, chức năng __construct được gọi đằng sau hậu trường. Kỳ diệu, phải không?

Nếu bạn đang tìm kiếm một ví dụ khác về hàm kỳ diệu, thì chỉ cần xem trang tiếp theo – nơi chúng tôi đưa ra ví dụ về hàm __autoload trong PHP và cách nó được sử dụng

PHP đã giới thiệu hàm __autoload[] trong phiên bản 5, được gọi bất cứ khi nào mã cố gắng sử dụng một lớp chưa được xác định. Bạn chỉ cần đặt một số mã vào __autoload[] để bao gồm tệp lớp thích hợp và không phải bận tâm về việc bao gồm các tệp đó theo cách thủ công. Bài đăng này xem xét cách thực hiện điều này với các ví dụ

Cập nhật ngày 15 tháng 6 năm 2009. Hãy nhớ đọc bài đăng "Tự động tải với thư viện SPL của PHP" của tôi, bài đăng này đề cập đến cách cho phép nhiều chức năng tự động tải với PHP. Cập nhật kết thúc

Một ví dụ đơn giản về việc sử dụng hàm __autoload của PHP là như vậy

function __autoload[$classname] {
    include["classes/$classname.class.php"];   
}

Nếu sau đó bạn chạy đoạn mã sau

$foo = new foo;

và lớp "foo" chưa được xác định, __autoload được gọi là chuyển "foo" làm tham số. Sau đó, hàm __autoload mẫu bao gồm tệp thích hợp như được định nghĩa trong ví dụ trên sẽ là "classes/foo. lớp. php", mặc dù bạn sẽ thay đổi điều này thành bất kỳ quy ước đặt tên và vị trí của tệp lớp nào

Lưu ý rằng không cần sử dụng include_once[] hoặc require_once[] để bao gồm các tệp – chỉ cần include[] hoặc require[] là được. Điều này là do __autoload sẽ không cần gọi lại nếu bạn tạo một phiên bản khác của lớp vì lớp đã được xác định. Sau đây minh họa điều này

echo "new foo
"; $foo = new foo; echo "new foo
"; $foo = new foo; echo "new bar
"; $bar = new bar; function __autoload[$classname] {     echo "autoload $classname
";     include["classes/$classname.class.php"]; }

Đầu ra từ trên sẽ là

new foo
autoload foo
new foo
new bar
autoload bar

Điều này cho thấy rằng __autoload[] chỉ được gọi mỗi khi một lớp chưa được xác định được sử dụng. Bởi vì lớp "foo" đã được định nghĩa lần thứ hai khi chúng ta tạo một đối tượng foo nên lớp đã được định nghĩa và không cần tải lại

Sử dụng chức năng tự động tải trong PHP thực sự hữu ích vì bạn không cần bận tâm bao gồm tất cả các tệp lớp cần thiết khi bắt đầu mỗi tập lệnh. chúng sẽ được tải tự động khi và khi được yêu cầu

Chức năng ma thuật và tải tự động trong PHP là gì?

Trong PHP __autoload[] là một phương thức ma thuật, có nghĩa là nó được gọi tự động khi bạn cố gắng tạo một đối tượng của lớp và nếu công cụ PHP không tìm thấy lớp trong tập lệnh, nó sẽ cố gắng gọi phương thức ma thuật __autoload[]. Bạn có thể thực hiện nó như ví dụ dưới đây. chức năng __autoload[$ClassName] { bao gồm[$ClassName

Hàm ma thuật trong PHP là gì?

Các phương thức ma thuật là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động nhất định được thực hiện trên một đối tượng . thận trọng. Tất cả các tên phương thức bắt đầu bằng __ được dành riêng bởi PHP. Do đó, không nên sử dụng các tên phương thức như vậy trừ khi ghi đè hành vi của PHP.

Autoload PHP được sử dụng là gì?

Hàm spl_autoload_register[] đăng ký bất kỳ số lượng trình tải tự động nào, cho phép các lớp và giao diện được tải tự động nếu chúng hiện chưa được xác định . Bằng cách đăng ký trình tải tự động, PHP có cơ hội cuối cùng để tải lớp hoặc giao diện trước khi lỗi xảy ra.

Tự động tải lớp trong PHP là gì?

tệp php. " Tự động tải là cách PHP tự động tìm các lớp và các tệp tương ứng của chúng mà không phải yêu cầu tất cả chúng theo cách thủ công .

Chủ Đề