Bài đăng

Đang hiển thị bài đăng từ Tháng 4, 2025

Generics trong PHP

Hình ảnh
PHP được biết đến là 1 ngôn ngữ đơn giản, biến trong PHP đều bắt đầu bằng $ , không bắt buộc phải khai báo rõ ràng kiểu dữ liệu, nhưng đó lại chính là một trong những thứ gây ra lỗi nhiều nhất trong PHP. Dưới đây là một ví dụ điển hình. Một số developer nghĩ rằng: cái function đó do tôi code thì tôi control được, tôi sẽ truyền đúng kiểu dữ liệu, tôi sẽ ép kiểu trước khi truyền vào function. Nhưng DỰ ÁN CÓ NHIỀU NGƯỜI THAM GIA, ĐÂU PHẢI CHỈ CÓ MỘT NGƯỜI. VÀ CHÚNG TA CŨNG KHÔNG ĐẢM BẢO RẰNG DỮ LIỆU TRUYỀN VÀO LÚC NÀO CŨNG HỢP LỆ Quay lại ví dụ, chúng ta có thể khai báo kiểu dữ liệu cho các biến của function để hạn chế vấn đề trên. Lưu ý: Để validate kiểu dữ liệu chúng ta phải khai báo  declare(strict_types=1); còn không thì PHP sẽ chỉ dùng kiểu dữ liệu khai báo để tự động ép kiểu mà thôi. Nhưng nếu chúng ta khai báo kiểu dữ liệu cho array thì sao? Làm sao để đảm bảo các phần tử trong array truyền vào là int hay string? Trong PHP không có khái niệm generics như các ngôn ngữ khác ví d...

Lambda và Closure trong PHP

Hình ảnh
 Chúng ta thường sử dụng lambda và closure  như là anonymous function trong callback nhưng lại chưa biết rõ 2 khái niệm khác nhau như thế nào. Vậy hãy cùng tìm hiểu nhé. 1. Lambda là gì?  Lambda (hay là Anonymous function) là một hàm không có tên, thường được khai báo gắn với 1 biến hoặc gán vào 1 hàm khác như một tham số. Các hàm này chỉ tồn tại trong phạm vi của biến mà nó được định nghĩa, vì vậy khi biến đó vượt ra ngoài phạm vi, thì hàm này cũng không còn nữa. 2. Closure là gì?  Một Closure về cơ bản giống như một Lambda , nhưng nó có thể truy cập các biến bên ngoài phạm vi mà nó được tạo ra. 3. Vậy hóa ra lambda với closure là một phải không?  Cũng gần đúng, điểm khác nhau thấy rõ nhất là closure có thể truy cập được biến từ bên ngoài thông qua use(...) . Dưới đây là bảng so sánh của chúng. Lambda Closure Kiểu dữ liệu object object instanceof of Closure Có Có Truy cập biến ở phạm vi bên ngoài Không có, sử dụng use (...) Lưu ý: PHP sẽ tự chuyển các ...