Không sử dụng hằng số cho điều đó. Không sử dụng hằng số toàn cầu.
Có hai loại hằng số: hằng số lớp / giao diện và hằng số toàn cầu.
Các hằng số trong các lớp hoặc giao diện là tốt và đôi khi hữu ích. Một ví dụ quá đơn giản:
interface Requirements
{
const MIN_PHP_VERSION = 5.4;
public function php_is_good();
}
class Theme_Requirements implements Requirements
{
public function php_is_good()
{
return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
}
}
Nhưng hãy nhớ, các hằng số này luôn được công khai. Nếu bạn thay đổi chúng sau này, bạn có thể phá vỡ mã phụ thuộc vào chúng.
Điều này là tồi tệ hơn với hằng số toàn cầu. Hãy tưởng tượng như sau:
define( 'THEME_URI', get_template_directory_uri() );
Và sau đó là một chức năng cho một hình ảnh tiêu đề mặc định:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
Hàm này đưa ra một giả định về một cái gì đó nằm ngoài tầm kiểm soát của nó, nó biết quá nhiều. Làm thế nào để bạn kiểm tra hàm đó với các giá trị khác nhau cho hằng số? Bạn không thể.
Giả sử bạn muốn kiểm tra điều gì xảy ra khi hằng số được đặt thành thư mục không tồn tại hoặc máy chủ khác chậm hơn. Nhưng một khi bạn đã xác định hằng số, bạn không thể thay đổi giá trị của nó. Bạn không thể chạy tất cả các bài kiểm tra trong một lần vội vàng, điều này làm cho việc kiểm tra khó hơn mức cần thiết.
Và trong một chủ đề con cố gắng sử dụng hình ảnh mặc định của riêng nó - làm thế nào để bạn thực hiện điều đó? Hằng số được đặt theo chủ đề gốc. Bạn có thể thêm một kiểm tra với defined()
, nhưng điều đó làm cho việc xem giá trị của nó thực sự được viết ở đâu khó hơn.
Sẽ tốt hơn nhiều nếu viết lại hàm thành:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
Tôi đã nói trước đó, hằng số là một API. API nên dễ thay đổi, nhưng thực sự rất khó để loại bỏ hằng số, vì PHP không đăng nhập quyền truy cập. Vì vậy, thông điệp phản đối của bạn sẽ không bao giờ đến tay các nhà phát triển khác, ngoại trừ khi họ đọc mã nguồn của bạn hoặc tài liệu của bạn rất cẩn thận. Tin tôi đi, họ không làm thế.
Sử dụng get_stylesheet_directory_uri()
trong các chủ đề con và get_template_directory_uri()
trong các chủ đề phụ huynh. Cả hai có thể được lọc trong thời gian chạy, vì vậy bạn có thể chạy tất cả thử nghiệm của mình cùng một lúc.