Mã PHP trong mẫu trang so với các chức năng


8

Tôi đã tạo ra nhiều trang web WordPress và đã học được các thực tiễn PHP mà tôi tin là đúng, tức là các hàm đi vào tệp tin.php, gần như mọi thứ trong hàm.php nên được gói trong một hàm, các mẫu trang có thể điều chỉnh PHP trong đó , Vân vân.

Nhưng tôi hơi run về 'tại sao'. Các mẫu trang so với tệp chức năng thay đổi những gì hoạt động và không hoạt động trong mỗi mẫu là gì? Tôi cho rằng đó là thứ tự tải nhưng bất kỳ hướng dẫn / hướng nâng cao nào sẽ được đánh giá cao.

Chỉnh sửa - Được rồi, tôi có được khía cạnh 'thực tiễn tốt nhất' của nó. Các chức năng có nghĩa là có thể tái sử dụng, v.v. Tôi đang tìm kiếm nhiều hơn vì lý do kỹ thuật khi / tại sao nó không hoạt động.


Đang tải thứ tự, tái sử dụng (bạn sẽ sử dụng lại chức năng từ mẫu như thế nào?) Và giữ mã sạch (các mẫu để hiển thị, không phải cho các chức năng)
Krzysiek Dróżdż

6
kiểm tra sơ đồ tải wp trong câu trả lời cho op: wordpress.stackexchange.com/questions/26537/ Các mẫu gần như được sử dụng nghiêm ngặt cho bản trình bày, vì vậy chúng được tải lần cuối khi tất cả logic ứng dụng được thực hiện. Tôi không biết nếu bạn đã nghe nói về mẫu Model-View-Controller. Mặc dù WordPress không thực sự có sự phân tách tốt giữa hai lớp còn lại, nhưng các mẫu vẫn còn khá nhiều. Các hàm nên chứa logic ứng dụng.
Rùa

Cảm ơn bạn, đó là hữu ích. Vì vậy, về mặt hook, nếu tôi đặt một hook như do_action ('enqueue_lightbox_assets') trong tệp mẫu của mình, tại thời điểm chạy tất cả các chức năng gắn vào hook đó đã được tải và lưu trữ, chỉ chờ một trình kích hoạt trong tương lai, đúng?
kế

Mẫu trang không phải lúc nào cũng được thực thi trong khi fucntion.php luôn được thực thi.
Qaisar Feroz

Câu trả lời:


2

Mặc dù không có câu trả lời 'chính thức', câu hỏi này vẫn còn khá phổ biến, vì vậy một năm sau tôi sẽ đăng những suy nghĩ vững chắc của mình về điều này.

Điều dẫn đến câu hỏi này là kinh nghiệm về mã làm việc ở một số nơi chứ không phải ở những nơi khác. Chẳng hạn, tại sao tôi phải bọc mã trong một hàm trong hàm.php thay vì chỉ đặt nó ở đó một cách lỏng lẻo, trong khi tôi có thể giữ nó lỏng lẻo trong một tệp mẫu? Cảm giác như thể có một số khác biệt cơ bản trong cách WordPress xử lý mã ở những nơi khác nhau.

Nhưng tất nhiên, điều đó không chính xác. PHP là PHP và WordPress chỉ đơn giản là đang theo đuổi trên đường đi, từng dòng một.

Sự khác biệt chính, như tôi đã viết trong câu hỏi ban đầu của mình và như Krzysiek và những người khác đã khẳng định, là thứ tự tải. Nhưng thứ tự tải trong WordPress là tất cả.

Hàm.php của một chủ đề được tải, nói một cách tương đối, từ rất sớm. Nó vẫn còn rất nhiều trong giai đoạn chuẩn bị. Các chức năng chính của WordPress đã sẵn sàng, chẳng hạn như add_action (), cũng như các plugin và toàn cầu. Nhưng nó chưa sẵn sàng để bạn bắt đầu làm mọi thứ. Đầu ra trang chưa được viết, vòng lặp chính không chạy, v.v.

Vì vậy, nếu bạn đặt một dòng mã lỏng lẻo để làm một cái gì đó "ngay bây giờ" trong hàm.php, có lẽ còn quá sớm. Thay vào đó, các dòng mã lỏng lẻo ở đây nên có tính chất chuẩn bị, nghĩa là "Thực hiện sau" hoặc "Đây là hằng số cho sau này" hoặc, như tên của tệp cho thấy, "Đây là một chức năng để chạy sau".

Các tệp mẫu, mặt khác, được chạy tương đối muộn. WordPress cho đến nay trong quá trình tải, nó có đủ thông tin để chọn tệp mẫu chính xác cho yêu cầu của người dùng. Hầu như bất kỳ mã lỏng lẻo nào cũng có ý nghĩa ở đây, bởi vì chúng ta sắp kết thúc chu kỳ. Mọi thứ khác được thiết lập và chúng tôi đã xây dựng đầu ra của chúng tôi.

Với tất cả điều này trong tâm trí, mọi thứ bắt đầu đi vào trọng tâm. Tại sao một lỗi cú pháp trong hàm.php gây ra một màn hình trắng chết chóc, nhưng một lỗi cú pháp trong một tệp mẫu chỉ làm hỏng trang giữa chừng? Vì Hàm.php đang chạy trước bất kỳ đầu ra nào, do đó, một lỗi sẽ phá vỡ mọi thứ trước khi có bất cứ điều gì hiển thị, nhưng một tệp mẫu có thể đi được một nửa.

Vì vậy, nó đi xuống theo trình tự, nhưng theo một cách sâu sắc hơn tôi nghĩ ban đầu.

ps Điều gì đã giúp tôi hiểu điều này tốt hơn trong năm qua là (a) hiểu rõ hơn về thứ tự tải đã đạt được từ bước qua trình tự tải với xDebug, theo nghĩa đen là xem mọi thứ diễn ra như thế nào và (b) hiểu sâu hơn về móc. Vì thứ tự tải rất quan trọng trong WordPress, hệ thống hook rất quan trọng. Nó giống như du hành thời gian cho mã của bạn.

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.