Cách truy cập tài sản riêng trong php
Tham gia bản tin của tôi
Vấn đề rất đơn giản. khởi tạo ReflectionClass hoặc ReflectionProperty chậm và chậm, ý tôi là rất chậm Show
Lý do cho nghiên cứu này là tôi đang cố gắng tối ưu hóa "bộ khử nước" để hoạt động với các tập dữ liệu lớn hơn mà vẫn giữ chi phí khởi tạo thấp PHP5. 4 để giải cứuPHP5. 4 đi kèm với API mới cho Đóng cửa, đó là 1 1 về cơ bản cho phép bạn lấy một thể hiện của một bao đóng với phạm vi của một đối tượng hoặc lớp nhất định. Khéo léo. Về cơ bản, điều đó giống như thêm API vào các đối tượng hiện cóHãy phá vỡ một số đóng gói OOP để phù hợp với nhu cầu của chúng tôi Các kỹ thuật để truy cập các thành viên riêng tư đã được giải thích trong hướng dẫn sử dụng PHP, nhưng dù sao thì tôi cũng sẽ làm một ví dụ đơn giản hóa Đây là những gì bạn phải làm để đánh cắp 3 từ đối tượng sau
Trước hết, hãy xác định một bao đóng để đọc thuộc tính như thể chúng ta có quyền truy cập vào nó
Hãy sử dụng nó để đánh cắp một số thứ 4 từ 5
Đáng buồn thay, điều này sẽ dẫn đến việc 6 bị bắt với một lỗi nghiêm trọng giống như sau
Hãy sử dụng 1 để làm cho tên trộm của chúng ta thông minh hơn 1Thành công. Bây giờ chúng ta có thể đến 8Thay đổi phạm vi đóng so với. Sự phản xạ. hiệu suấtLàm thế nào để kỹ thuật này so sánh với 9? Tôi đã xây dựng một điểm chuẩn đơn giản để lập hồ sơ bước "thiết lập" cho thủ thuật này qua hơn 100000 lần lặp lại 4 5Trên PHP 5 mới được biên dịch. 5 (Ubuntu 13. 04 AMD64), tập lệnh đầu tiên mất khoảng 0. 325 giây để chạy, trong khi cái thứ hai yêu cầu 0. 658 giây Phản xạ ở đây chậm hơn nhiều Tuy nhiên, điều đó hoàn toàn không thú vị, vì sẽ không có ai khởi tạo 100000 thuộc tính phản chiếu hoặc ít nhất là tôi không thể tìm ra lý do chính đáng để làm điều đó Điều có vẻ thú vị hơn là cách so sánh việc truy cập các thuộc tính. Tôi cũng đã lập hồ sơ đó 6 7Tập lệnh đầu tiên mất ~ 0. 110 giây để chạy, trong khi cái thứ hai cần ~ 0. 199 giây Chúng ta thực sự nhanh hơn nhiều so với sự phản chiếu. Ấn tượng Truy cập các thuộc tính lớp riêng bằng tham chiếuThực sự có một lợi thế lớn khi sử dụng Closure thay vì ReflectionProperty, đó là giờ đây bạn có thể truy xuất một thuộc tính riêng tư bằng cách tham chiếu 8Một bản tóm tắt trình đọc thuộc tính chungVới tất cả các khái niệm mới này, chúng ta có thể viết một bộ truy cập rất đơn giản cho phép chúng ta đọc bất kỳ thuộc tính nào của bất kỳ đối tượng nào 0Đây là ví dụ làm việc Đó là nó. truy cập bất kỳ thuộc tính nào, ở bất kỳ đâu và thậm chí bằng tham chiếu. Thành công. Chúng tôi đã phá vỡ các quy tắc một lần nữa Tôi sẽ không đề cập đến phần "viết thuộc tính", cũng như không xử lý các thuộc tính riêng được kế thừa, vì đó chỉ là chi tiết của thủ thuật cơ bản cần nhiều mã hơn và không thú vị đối với chúng tôi Phần kết luậnTuy nhiên, một lần khác, PHP cho thấy tất cả các khía cạnh tốt nhất và tồi tệ nhất của nó. Đó là một ngôn ngữ khủng khiếp với cú pháp khủng khiếp, nhưng nó cho phép chúng tôi viết mã tuyệt vời và vượt qua vô số giới hạn ngôn ngữ bằng cách chỉ cung cấp các tính năng mới và tuyệt vời ở mỗi bản phát hành Bản thân tôi sẽ không sử dụng kỹ thuật này, nhưng thật thú vị khi đi sâu vào nó và nó sẽ trở nên hữu ích trở lại nếu tôi cần tham chiếu đến các thành viên lớp riêng tư/được bảo vệ trong các dự án proxy điên rồ của mình Tôi nên thêm một tuyên bố từ chối trách nhiệm. sử dụng cẩn thận sai sótTrong phiên bản đầu tiên của bài báo được xuất bản 2013-07-10, tôi thực sự đã nói rằng Reflection nhanh hơn. điều đó không đúng và là kết quả của một lỗi mà tôi đã mắc phải khi chạy thử nghiệm, vì tôi đang chạy phiên bản PHP có vô số tiện ích mở rộng ảnh hưởng đến kết quả Tôi đã tạo một máy ảo với phiên bản sạch 5. 5 PHP để có kết quả chính xác, điều này chứng tỏ rằng Reflection thực sự chậm hơn bao đóng trong mọi trường hợp Làm cách nào để truy cập các thành viên riêng tư bên ngoài lớp học trong PHP?Như bạn có thể thấy, privateMethod là một phương thức riêng tư và nếu chúng ta muốn truy cập nó bên ngoài lớp như vậy, chúng ta sẽ gặp lỗi nghiêm trọng. Để giải quyết vấn đề này, chúng ta có thể sử dụng lớp ReflectionMethod dựng sẵn của PHP lớp này có thể cung cấp rất nhiều thông tin về lớp. Và cũng có thể "thiết kế ngược" mọi thứ cho chúng tôi.
Làm cách nào để gọi một phương thức riêng tư trong PHP?Gọi các phương thức PHP riêng tư/được bảo vệ . lớp Foo { thanh hàm riêng (). chuỗi { trả về 'baz'; . $reflectionClass = new ReflectionClass(Foo. lớp); Làm cách nào để truy cập một phương thức được bảo vệ trong PHP?Không thể áp dụng công cụ sửa đổi quyền truy cập được bảo vệ cho các lớp học. Tuy nhiên, chúng có thể được gọi bởi một lớp con được kế thừa từ lớp cha của nó. Do đó, người ta có thể khai báo phương thức được yêu cầu hoặc một biến là được bảo vệ bằng cách đặt trước nó bằng từ khóa “được bảo vệ” .
Làm cách nào để khai báo biến riêng trong PHP?Cách tốt nhất để khai báo một biến riêng trong Lớp PHP là tạo chúng phía trên phương thức __Construction , theo quy ước, bạn có thể bắt đầu . e $_private_variable) để cho các lập trình viên khác đang đọc mã của bạn biết ngay rằng đó là một biến riêng tư, tuyệt vời. |