2013-01-16 20 views
27

Hãy nói rằng tôi đã có hai tập tin class.phppage.phpLàm thế nào để sử dụng một lớp PHP từ tập tin khác

class.php

<?php 
class IUarts { 
    function __construct() { 
     $this->data = get_data('mydata'); 
    } 
} 
?> 

Đó là một rất ví dụ thô sơ, nhưng giả sử tôi muốn sử dụng:

$vars = new IUarts(); 
print($vars->data);` 

trong tệp page.php của tôi; làm thế nào để tôi làm điều đó? Nếu tôi làm include(LIB.'/class.php');, nó sẽ hét lên với tôi và cung cấp cho tôi Fatal error: Cannot redeclare class IUarts in /dir/class.php on line 4

Trả lời

42

Bạn có thể sử dụng include/include_once hoặc require/require_once

require_once('class.php'); 

Ngoài ra, sử dụng autoloading bằng cách thêm vào page.php

<?php 
function __autoload($class_name) { 
    require_once $class_name . '.php'; 
} 

$vars = new IUarts(); 
print($vars->data);  
?> 

Nó cũng hoạt động thêm chức năng __autoload trong thư mục lib mà bạn đưa vào mỗi tệp như utils.php.

Ngoài ra còn có bài đăng này có cách tiếp cận tốt đẹp và khác biệt.

Efficient PHP auto-loading and naming strategies

+0

"__autoload() bị phản đối, sử dụng spl_autoload_register() thay vì" Từ kết quả này là khá cao trên google, có lẽ ai đó nên chỉnh sửa nó và chỉ ra điều này rõ ràng hơn? – Simon

4

Thay vào đó hãy sử dụng include_once.
Lỗi này có nghĩa là bạn đã bao gồm tệp này.

include_once(LIB.'/class.php');

8

Trong trường hợp này, có vẻ như bạn đã bao gồm các tập tin ở đâu đó. Nhưng đối với các tập tin lớp học, bạn thực sự nên "bao gồm" chúng bằng cách sử dụng require_once để tránh điều đó; nó sẽ không bao gồm các tập tin nếu nó đã được. (Và bạn thường nên sử dụng require[_once], không include[_once], sự khác biệt được rằng require sẽ gây ra một lỗi nghiêm trọng nếu các tập tin không tồn tại, thay vì chỉ phát hành một cảnh báo.)

-1

Sử dụng include("class.classname.php");

Và lớp nên sử dụng <?php //code ?> not <? //code ?>

+0

Điều thứ hai mà bạn đã nói không cụ thể cho câu hỏi này hoặc chính xác. '' chỉ là cú pháp mới hơn, tôi tin rằng nó có thể được kích hoạt hoặc vô hiệu hóa trong 'php.ini'. (Xin lỗi để hồi sinh điều này) –

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