Gần đây, tôi đã cải tiến khung của mình để chuẩn bị cho phiên bản thứ hai của CMS của công ty chúng tôi. Tôi undid một lượng lớn những thứ tôi đã tạo để thay thế chúng bằng các vật thể thông thường. Để làm được điều đó, tôi đã tạo ra một số lượng lớn tính linh hoạt được sử dụng để dựa vào tôi trải qua và xâm nhập vào các tệp lõi. Bây giờ tôi chỉ sử dụng các cấu trúc tĩnh khi thay thế duy nhất là các hàm toàn cầu, mà chỉ liên quan đến chức năng cốt lõi cấp thấp.
Tôi sẽ hiển thị một vài dòng tệp bootstrap.php của mình (tất cả yêu cầu của tôi được gửi qua tệp đó, nhưng bạn có thể đạt được kết quả tương tự bằng cách bao gồm nó ở đầu mỗi tệp) ý tôi là gì Đây là một phiên bản khá lớn của những gì bạn có thể sử dụng trong tình huống của bạn, nhưng hy vọng ý tưởng này là hữu ích. (Đây là tất cả được sửa đổi một chút.)
//bootstrap.php
...
// CONSTRUCT APPLICATION
{
$Database = new Databases\Mysql(
Constant::get('DATABASE_HOST'),
Constant::get('DATABASE_USER'),
Constant::get('DATABASE_PASSWORD'),
Constant::get('DATABASE_SCHEMA')
);
$Registry = new Collections\Registry;
$Loader = new Loaders\Base;
$Debugger = new Debuggers\Dummy; // Debuggers\Console to log debugging info to JavaScript console
$Application = new Applications\Base($Database, $Registry, $Loader, $Debugger);
}
...
Như bạn thấy, tôi có tất cả các loại tùy chọn để tạo đối tượng ứng dụng của tôi, mà tôi có thể cung cấp như một cuộc tranh cãi trong các nhà xây dựng với các đối tượng khác để cung cấp cho họ truy cập vào các nhu yếu phẩm "toàn cầu".
Đối tượng cơ sở dữ liệu tự giải thích. Đối tượng đăng ký hoạt động như một vùng chứa cho đối tượng mà tôi có thể muốn truy cập ở nơi khác trong ứng dụng. Trình tải hoạt động như một tiện ích để tải các tài nguyên khác như tệp mẫu. Và trình gỡ rối ở đó để xử lý đầu ra gỡ lỗi.
Ví dụ: tôi có thể thay đổi lớp cơ sở dữ liệu mà tôi khởi tạo và, thì tôi có kết nối với cơ sở dữ liệu SQLite. Tôi có thể thay đổi lớp của trình gỡ rối (như đã lưu ý) và bây giờ tất cả thông tin gỡ lỗi của tôi sẽ được ghi vào bảng điều khiển JavaScript của tôi.
OK, bây giờ hãy quay lại vấn đề. Làm thế nào để bạn cung cấp cho các đối tượng khác truy cập vào tất cả điều này? Bạn chỉ cần truyền nó trong một đối số cho hàm tạo.
// still bootstrap.php
...
// DISPATCH APPLICATION
{
$Router = new Routers\Http($Application);
$Router->routeUri($_SERVER['REQUEST_URI']);
}
...
Không chỉ vậy, nhưng Bộ định tuyến của tôi (hoặc bất kỳ đối tượng nào tôi xây dựng với nó) cũng linh hoạt hơn. Bây giờ tôi chỉ có thể khởi tạo đối tượng ứng dụng của mình một cách khác nhau và Router của tôi sẽ hoạt động khác nhau cho phù hợp.
Xin chào, cảm ơn câu trả lời của bạn, có thể lưu các biến trong các lớp tĩnh hay không. tức là chức năng gọi để kiểm tra xem người dùng có đăng nhập hay không và sau đó truy cập vào biến này vài lần sau đó trong trang? –
Có, đối với một lớp tĩnh làm điều tương tự tôi đã làm để khai báo biến $ class. Điều duy nhất là bạn 'có' để khai báo mỗi biến bạn sử dụng. –
Nhưng, mã tôi đưa cho bạn cho phép bạn sử dụng bất kỳ lớp thông thường nào, tốt, thường xuyên. Phần tĩnh đơn giản cung cấp cho bạn lớp, thay vì toàn cầu hóa nó. Tôi sẽ chỉnh sửa để hiển thị thêm một chút. –