Làm thế nào để đặt tên tập tin của các lớp được đặt tên?


9

Cẩm nang WP Core> Tiêu chuẩn mã hóa PHP> Quy ước đặt tên gợi ý những điều sau đây để đặt tên tệp với các lớp:

Tên tệp lớp nên được dựa trên tên lớp được class- thêm trước và dấu gạch dưới trong tên lớp được thay thế bằng dấu gạch nối, ví dụ WP_Error:

class-wp-error.php

Mặc dù từ ngữ của phần chủ yếu dành cho sử dụng cốt lõi , nhưng theo tôi, phong cách mã hóa thường áp dụng (và theo ý kiến ​​của tôi) áp dụng cho mã WP của bên thứ ba.

Tuy nhiên, vì core không hỗ trợ các không gian tên (PHP 5.2, ugh) nên điều này không giải thích cho trường hợp đó.

Cách thực tế để đi cho nó từ quan điểm của sự thuận tiện của nhà phát triển là gì? Hỗ trợ bộ nạp tự động?

Tôi có thể thấy nhiều cách khác nhau:

  • bỏ qua không gian tên hoàn toàn
  • bao gồm không gian tên trong tên tệp
  • sử dụng không gian tên làm cấp độ thư mục
  • sử dụng sơ đồ đặt tên thay thế hoàn toàn, chẳng hạn như PSR

3
Ý kiến ​​trung thực của tôi là nếu bạn sử dụng PHP 5.3+ thì bạn đã vi phạm các quy tắc cốt lõi của WP. Hơn nữa, xem xét rằng các tiêu chuẩn WP không tính đến các giao diện hoặc đặc điểm. Vì vậy, với tôi chỉ cần chọn một cách thuận tiện cho bạn và sử dụng một tiêu chuẩn đã được thiết lập như PSR có vẻ là lựa chọn tốt hơn trong trường hợp đó.
gmazzap

Câu trả lời:


7

Đầu tiên, bỏ qua class-tiền tố. Điều này xuất phát từ cách tiếp cận mã thủ tục thuần túy của WordPress, các lớp được sử dụng làm vùng chứa cho mã thủ tục, không dành cho các đối tượng thực và hầu hết các tệp không chứa các lớp ở tất cả hoặc các lớp và mã khác cùng nhau. Không có nghĩa gì khi tất cả các tệp của bạn chỉ chứa một lớp và không có gì khác.
Nếu bạn theo mô hình đó, bạn sẽ phải sử dụng interface-foo.phptrait-bar.php. Điều đó không chỉ trông vô lý, nó làm cho việc tự động tải khó hơn mức cần thiết.

Cách dễ nhất để phân tách không gian tên và tên lớp / giao diện / đặc điểm là (theo kinh nghiệm của tôi) gán không gian tên cho tên thư mục và tên lớp cho tên tệp. Điều này giúp dễ dàng ánh xạ lớp được yêu cầu vào một cấu trúc tệp nhất định trong trình tải tự động: Chỉ cần chuyển đổi \sang /, nối thêm .phpvà tải tệp.

Điều này giúp dễ dàng lưu trữ các tra cứu: đối với mọi thư mục / không gian tên, bạn có thể tìm nạp tất cả các tệp hiện có vào lần đầu tiên thư mục đó được yêu cầu và đối với các cuộc gọi sau, bạn có thể sử dụng lại danh sách tên tệp đó mà không cần hỏi file_exists()mỗi lần .


4
Nói cách khác: Làm cho nó tương thích PSR :)
kaiser

2

Tôi đã tạo một lớp cho yêu cầu này, tương thích với PSR-4 và tuân theo các tiêu chuẩn mã hóa Wordpress.

Bạn có thể truy cập tại đây: https://github.com/pablo-pacheco/wp-namespace-autoloader

Lời giải thích là có tất cả nhưng về cơ bản đó là một sự phụ thuộc của nhà soạn nhạc. Bạn chỉ cần yêu cầu nó trong dự án của bạn:

"require": {    
    "pablo-pacheco/wp-namespace-autoloader": "dev-master"
}

Và sau đó gọi lớp

<?php
new \WP_Namespace_Autoloader( array(    
    'directory'   => __DIR__,       // Directory of your project. It can be your theme or plugin. __DIR__ is probably your best bet.    
    'namespace'   => __NAMESPACE__, // Main namespace of your project. E.g My_Project\Admin\Tests should be My_Project. Probably if you just pass the constant __NAMESPACE__ it should work     
    'classes_dir' => 'src',         // (optional). It is where your namespaced classes are located inside your project. If your classes are in the root level, leave this empty. If they are located on 'src' folder, write 'src' here 
) );

1

Tôi thường đi với nửa sau của các tùy chọn của bạn:

  • sử dụng không gian tên làm cấp độ thư mục
  • sử dụng sơ đồ đặt tên thay thế hoàn toàn, chẳng hạn như PSR

Nếu bạn sử dụng trình soạn thảo để đăng ký trình tải tự động PSR-4, bạn có thể theo sát các quy ước đặt tên WP. Không gian tên được ánh xạ tới (các) thư mục có thể chứa dấu gạch dưới với các tệp có tên giống như lớp cũng có thể chứa dấu gạch dưới. Giống:

<Namespace_Dir>/Class_Name.php

Khi WP chuyển sang php 5.3+ (cuối cùng nó phải xảy ra, phải không?!) Các hướng dẫn cần được cập nhật. Vì PSR-0 đã bị phản đối nên ít nhất nên khuyến nghị PSR-4 nếu không cần thiết.


0

Giải pháp của pablo-sg-pacheco đã làm việc cho tôi, tự động tải dựa trên trình soạn thảo chưa tương thích với các tiêu chuẩn mã hóa WordPress, tuy nhiên url cho repo Github là:

https://github.com/pablo-sg-pacheco/wp-namespace-autoloader

và tên gói là:

"require": {    
    "pablo-sg-pacheco/wp-namespace-autoloader": "dev-master"
}

Cuối cùng, bạn cũng sẽ cần thêm phần sau vào composer.json vì gói không có sẵn trên packagist:

"repositories": [{
    "type": "vcs",
    "url": "https://github.com/pablo-sg-pacheco/wp-namespace-autoloader"
}] 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.