Đăng ngày 16 tháng 6 năm 2015 bởi Kasper KopecTrong PHP, đặc điểm là một cơ chế sử dụng lại mã mà, trong khi rất mạnh mẽ, cũng là khó khăn để gõ kiểm tra cả hai hiệu quả và exhaustively. Trong bài này, chúng tôi sẽ bổ nhào sâu hơn vào những lý do cho điều đó và xem như thế nào Hack giải quyết những vấn đề, cho phép bạn sử dụng những đặc điểm trong một cách an toàn mà không có hạn chế biểu cảm của họ.Để chạy bộ nhớ của bạn: đặc điểm là bó của mã đó có thể được đưa vào bất kỳ lớp học để mở rộng chức năng của nó:đặc điểm T {} công hàm số f (chuỗi $s): Chuỗi {} ... }}lớp C {} sử dụng T; dòng mà làm cho các cuộc gọi đến $this -> f(...) tốt chức năng công cộng test(): Chuỗi {} trở lại $this -> f('foo'); }}Tại thời gian chạy, sử dụng kết quả đặc điểm trong cơ thể của nó được về cơ bản sao chép-dán vào sử dụng các lớp. Đặc điểm mã sau đó có thể gọi phương pháp lớp tự do-để làm cho nó an toàn, chúng tôi cần phải đảm bảo rằng các phương pháp đó thậm chí tồn tại, và rằng họ chấp nhận và trả lại dự kiến sẽ loại:Lưu ý: đây là một ví dụ giả thuyết của loại sai lầm mà chúng tôi muốn bắt. Việc kiểm tra loại sẽ thực sự ngăn chặnnó từ chối định nghĩa của T viết ở đây là không an toàn -Xem thảo luận dưới đây.đặc điểm T {} riêng hàm f (chuỗi $s): Chuỗi {} trở lại $this -> g(); }}lớp C {} sử dụng T; chức năng công cộng test(): void {} $this -> f("foo"); LỖI: f sẽ cố gắng gọi g, mà không tồn tại } / / trong lớp này }Vì vậy, làm thế nào là tình trạng này khác nhau từ kiểm tra bất kỳ chức năng khác và tại sao không thể Hack chỉ cần làm việc và làm điều đó? Sự khác biệt quan trọng ở đây là unsoundness có thể không được bao gồm trong định nghĩa đặc điểm (cơ thể của nó), cũng không phải trong việc sử dụng của nó tuyên bố tại địa điểm cụ thể, nhưng phụ thuộc vào cả hai người trong số họ. Trong ví dụ ở trên, nó là không thể nhìn vào cơ thể của hàm số f và nói nếu nó là đúng hay không (nó phụ thuộc vào những gì $this là), và cũng không có thể nhìn vào cơ thể của C, và biết chỉ có chữ ký của các chức năng trong, nói cho dù sử dụng T có là an toàn-nó phụ thuộc vào những gì những chức năng làm với $this.Bởi vì điều này, trong các mô hình không hạn chế sao chép-dán của PHP, để kiểm tra sử dụng đặc điểm chúng tôi cần các cơ quan thực tế, không chỉ là các định nghĩa. Điều này có nghĩa rằng thay đổi một nhân vật duy nhất trong một cơ thể chức năng đặc điểm sẽ yêu cầu đi qua tất cả các lớp học bằng cách sử dụng nó và tái kiểm tra chúng. Để hiểu lý do tại sao điều này là không thể chấp nhận, chúng ta phải nhìn lại Hack mục tiêu thiết kế ban đầu.
đang được dịch, vui lòng đợi..
