2011-01-26 31 views
7

Tôi có một vài câu hỏi về đường dẫn bao gồm trong PHP và bao gồm các tệp và/hoặc các lớp.Tại sao sử dụng set_include_path() trong PHP và cách tự động tải các lớp từ các thư mục khác nhau?

Dưới đây là một đoạn mã đơn giản mà chúng tôi đang đặt nhiều đường dẫn bao gồm. Tôi thấy điều này trong một dự án khác nhưng tôi không chắc tại sao?

Tôi chưa bao giờ phải sử dụng set_include_path() trong bất kỳ dự án nào của tôi trong 5 năm qua.

Q1)
Vì vậy, chính xác mục đích của việc thiết lập đường dẫn bao gồm là gì? Tôi đã luôn luôn chỉ bao gồm các đường dẫn trong bao gồm() của tôi gọi.

Q2)
Trong ví dụ bên dưới, nó đặt thêm 1 đường dẫn. Làm thế nào để làm việc này để bao gồm các tập tin ở nhiều địa điểm, tôi bối rối về mục đích hoặc những gì nó làm chính xác?

<?php 
// Define App path 
define('APPLICATION_PATH', realpath('../')); 

// Build array of 3 different paths 
$paths = array(
    APPLICATION_PATH, 
    APPLICATION_PATH . '\com', 
    get_include_path() 
); 


/* 
Result of array above... 
Array 
(
    [0] => E:\Web Server\xampp\htdocs\test 
    [1] => E:\Web Server\xampp\htdocs\test\com 
    [2] => .;C:\php5\pear 
) 
*/ 

// Set include path from array above 
// http://us3.php.net/manual/en/function.set-include-path.php 
set_include_path(implode(PATH_SEPARATOR, $paths)); 

?> 

Q3)
Đây là câu hỏi hơi khác nhau nhưng vẫn liên quan đến bao gồm. Dưới đây là một chức năng tự động tải đơn giản cho các lớp học. Tôi đã từng có một thư mục lớp và tự động tải tất cả các tệp lớp của tôi. Trong dự án hiện tại của tôi, tôi có một thư viện các lớp để tự động tải như dưới đây, nhưng sau đó tôi cũng có một phần khác mà tôi có thể cần phải tự động tải các tệp lớp từ một thư mục mô-đun.

Vì vậy, tôi sẽ cần phải autoload lớp thư viện của tôi nằm ở đâu đó như thế này ....

root/includes/thư viện/lớp/library_class_files.php

+++ cộng +++

các lớp tải cho các mô-đun khác nhau (tài khoản, tin nhắn, bạn bè, ảnh, blog, diễn đàn, v.v.) nằm ở đâu đó như thế này ....

root/modules/forums/modules_class_files.php

Tôi có thể không cần tải các tệp lớp từ 2 vị trí khác nhau, nhưng nếu tôi làm, tôi sẽ làm như thế nào?

<?php 
//auto include class files that we need on a per page basis 
function __autoload($class_name){ 
    include('library/classes/' .$class_name . '.class.php'); 
} 
?> 

Trả lời

Các vấn đề liên quan