Hướng dẫn dùng prev meaning trong PHP
Hàm Show Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Cú phápCú
pháp: Trong đó:
Ví dụCode $arr = array( 'vi tri 1', 'vi tri 2' , 'vi tri 3', 'vi tri 4' ); next($arr); next($arr); echo pos($arr).' Kết quả vi tri 3 vi tri 2 Như đã thấy trong ví dụ, con trỏ nội bộ đã di chuyển đến vị trí trước đó( vị trí 2) so với vị trị hiện tại( vị trí 3). Bài viết này được đăng tại [free tuts .net] Tham khảo: php.net Cùng chuyên mục:
Giảm thiểu sao chép mã thông qua tổ chức tốt hơn và tái sử dụng mã là mục tiêu quan trọng của lập trình hướng đối tượng. Nhưng trong PHP đôi khi bạn có thể gặp khó khăn vì những hạn chế của mô hình đơn kế thừa mà nó sử dụng; bạn có một số phương thức mà bạn muốn sử dụng trong nhiều lớp nhưng chúng không thể kế thừa từ nhiều lớp. Các ngôn ngữ như C++ và Python cho phép chúng ta kế thừa từ nhiều lớp để giải quyết vấn đề này ở một mức độ nào đó và mixins trong Ruby cho phép chúng ta trộn chức năng của một hoặc nhiều lớp mà không cần sử dụng kế thừa. Nhưng đa kế thừa có nhiều vấn đề chẳng hạn như Diamond Problem và mixins có thể là một cơ chế quá phức tạp để giải quyết vấn đề. Trong bài viết này chúng ta sẽ thảo luận về traits, một tính năng mới được giới thiệu trong PHP 5.4 để khắc phục các vấn đề như vậy. Bạn có thể xem giới thiệu về traits trong PHP ở bài viết này: Traits trong PHP | Comdy Traits trong PHP là gì? Traits trong PHP được sử dụng để làm gì? Cách khai báo và sử dụng traits trong PHP. ComdyKhái niệm về traits tự nó không có gì mới đối với lập trình và được sử dụng trong các ngôn ngữ khác như Scala và Perl. Chúng cho phép chúng ta sử dụng lại mã theo chiều ngang trên các lớp độc lập trong các phân cấp lớp khác nhau. Traits là gì?Traits tương tự như một lớp trừu tượng không thể tự khởi tạo (mặc dù nó thường được so sánh với một interface). Tài liệu PHP định nghĩa traits như sau: Traits là một cơ chế để tái sử dụng mã trong các ngôn ngữ đơn kế thừa như PHP. Traits nhằm giảm một số hạn chế của đơn kế thừa bằng cách cho phép nhà phát triển sử dụng lại các tập phương thức một cách tự do trong một số lớp độc lập ở trong các hệ thống phân cấp lớp khác nhau. Hãy xem xét ví dụ này:
Sẽ có vấn đề nếu cả hai lớp trên đều cần một số chức năng chung, ví dụ như làm cho cả hai đều là Singleton. Vì PHP không hỗ trợ đa kế thừa, mỗi lớp sẽ phải triển khai mã cần thiết để hỗ trợ mẫu Singleton hoặc sẽ có một hệ thống phân cấp thừa kế không có ý nghĩa. Traits cung cấp một giải pháp chính xác cho loại vấn đề này.
Traits Hãy thử tạo các đối tượng của các lớp này bằng phương thức
Đây là kết quả:
Chúng ta có thể thấy Traits không áp đặt bất kỳ ngữ nghĩa bổ sung nào trên lớp. Theo một cách nào đó, bạn có thể nghĩ về nó như là một cơ chế sao chép và dán hỗ trợ trình biên dịch trong đó các phương thức của traits được sao chép vào lớp chứa nó. Nếu chúng ta chỉ đơn giản là tạo lớp con
Nhiều traitsCho đến nay chúng ta chỉ sử dụng một traits trong một lớp, nhưng trong một vài trường hợp, chúng ta có thể cần kết hợp chức năng của nhiều traits.
Đây là kết quả:
Ở đây chúng tôi có hai traits là Trong lớp Traits lồng nhauKhi ứng dụng lớn lên, rất có thể chúng ta sẽ có một tập hợp các traits được sử dụng trên các lớp khác nhau. PHP 5.4 cho phép chúng ta có các traits lồng nhau để chúng ta có thể thêm chỉ một traits thay vì nhiều traits vào trong tất cả các lớp này. Điều này cho phép chúng ta viết lại ví dụ trước như sau:
Đây là kết quả:
Ở đây chúng tôi đã tạo ra traits Vì traits Thứ tự ưu tiênNhư tôi đã đề cập, traits hoạt động như thể các phương thức của chúng đã được sao chép và dán vào các lớp sử dụng chúng và chúng hoàn toàn được làm phẳng theo định nghĩa của các lớp. Có thể có các phương thức có cùng tên trong các traits khác nhau hoặc trong chính lớp đó. Bạn có thể tự hỏi cái nào sẽ có hiệu lực trong đối tượng của lớp con. Thứ tự ưu tiên là:
Điều này được làm rõ trong ví dụ sau:
Đây là kết quả:
Chúng ta có lớp Chúng tôi có hai phương thức là Nhưng trong đầu ra, chúng ta có thể thấy phương thức Giải quyết xung đột và bí danhKhi sử dụng nhiều traits có thể xảy ra tình huống trong đó các traits khác nhau sử dụng cùng tên phương thức. Ví dụ: PHP sẽ đưa ra một lỗi nghiêm trọng nếu bạn cố chạy mã sau đây vì xung đột tên các phương thức:
Những xung đột như vậy không được giải quyết tự động cho bạn. Thay vào đó, bạn phải chọn phương thức nào sẽ được sử dụng bằng từ khóa
Đây là kết quả:
Ở đây chúng tôi đã chọn sử dụng phương thức Trong ví dụ trên, một trong hai phương thức của hai traits đã được chọn. Nhưng có một số trường hợp bạn muốn giữ cả hai phương thức mà vẫn tránh được xung đột. Trong trường hợp này bạn có thể sử dụng một tên mới (bí danh) cho một phương thức của traits. Một bí danh không làm thay đổi tên của phương thức, nhưng nó cung cấp một tên thay thế để gọi phương thức đó. Bí danh được tạo bằng cách sử dụng từ khóa
Đây là kết quả:
Bây giờ bất kỳ đối tượng nào của lớp ReflectionReflection API là một trong những tính năng mạnh mẽ của PHP để phân tích cấu trúc bên trong của các interface, lớp và phương thức và dịch ngược chúng. Và vì chúng ta đang nói về traits, bạn có thể muốn biết về các hỗ trợ của Reflection API cho traits. Trong PHP 5.4, bốn phương thức đã được thêm vào Chúng ta có thể sử dụng Phương thức Phương thức Trong phần trước chúng ta đã thảo luận về việc sử dụng bí danh cho các traits để tránh xung đột do các traits có cùng tên. Phương thức Các tính năng khácNgoài những điều đã đề cập ở trên, còn có những đặc điểm khác khiến traits trở nên thú vị hơn. Chúng ta biết rằng trong kế thừa cổ điển, các thuộc tính riêng của một lớp không thể được truy cập bởi các lớp con. Tuy nhiên traits có thể truy cập các thuộc tính hoặc phương thức riêng của các lớp sử dụng nó và ngược lại! Đây là một ví dụ:
Đây là kết quả:
Vì traits được làm phẳng hoàn toàn vào lớp sử dụng chúng, bất kỳ thuộc tính hoặc phương thức nào của traits sẽ trở thành một phần của lớp đó và chúng tôi truy cập chúng giống như bất kỳ thuộc tính hoặc phương thức khác của lớp. Chúng ta thậm chí có thể có các phương thức trừu tượng trong traits để bắt các lớp sử dụng nó phải ghi đè các phương thức này. Ví dụ:
Đây là kết quả:
Ở đây chúng tôi có một traits tên là Mặt khác, PHP sẽ đưa ra một lỗi cho biết có một phương thức trừu tượng chưa được ghi đè. Không giống như traits trong Scala, traits trong PHP có thể có một hàm khởi tạo nhưng nó phải được khai báo public (một lỗi sẽ được ném nếu là private hoặc protected). Dù sao đi nữa, bạn hãy thận trọng khi sử dụng các hàm khởi tạo trong traits, bởi vì nó có thể dẫn đến các xung đột ngoài ý muốn trong các lớp sử dụng nó. Tóm lượcTraits là một trong những tính năng mạnh nhất được giới thiệu trong PHP 5.4 và tôi đã thảo luận gần như tất cả các tính năng của chúng trong bài viết này. Chúng cho phép các lập trình viên sử dụng lại các đoạn mã theo chiều ngang trên nhiều lớp mà không phải nằm trong cùng một hệ thống phân cấp thừa kế. Thay vì có ngữ nghĩa phức tạp, chúng cung cấp cho chúng ta cơ chế đơn giản để tái sử dụng mã. Mặc dù traits có một số nhược điểm nhưng chắc chắn chúng có thể giúp cải thiện thiết kế ứng dụng của bạn, loại bỏ sao chép mã và làm cho nó trở nên DRY (Don't Repeat Yourself) hơn. Nếu Comdy hữu ích và giúp bạn tiết kiệm thời gianBạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web. Lập Trình PHP |