2013-01-16 27 views
27

比方說,我有兩個文件class.phppage.php文件如何使用PHP類從另一個文件

class.php

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

這是一個非常rudamentary例子,但讓我們說,我想用:

$vars = new IUarts(); 
print($vars->data);` 
我page.php文件文件

;我該怎麼做呢?如果我做include(LIB.'/class.php');它大叫我,並給我Fatal error: Cannot redeclare class IUarts in /dir/class.php on line 4

回答

42

您可以使用include/include_oncerequire/require_once

require_once('class.php'); 

可替代地,通過向page.php

0123使用 autoloading
<?php 
function __autoload($class_name) { 
    require_once $class_name . '.php'; 
} 

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

它還可以在您包含在每個文件(如utils.php)中的lib中添加__autoload函數。

還有這個帖子,有一個很好的和不同的方法。

Efficient PHP auto-loading and naming strategies

+0

「__autoload()已過時,使用spl_autoload_register(),而不是」 因爲這個結果是在谷歌相當高的,也許有人要編輯並更清楚地指出這一點? – Simon

4

改爲使用include_once
此錯誤表示您已包含此文件。

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

8

在這種情況下,看來你已經包含在該文件的某個地方。但是對於類文件,你應該使用require_once「包含」它們來避免這種事情;如果它已經存在,它將不包含該文件。 (你通常應該使用require[_once],不include[_once],不同之處在於require會造成致命的錯誤,如果文件不存在,而不是僅僅發出警告。)

-1

使用include("class.classname.php");

和類應該使用<?php //code ?> not <? //code ?>

+0

你說的第二件事不是特定於這個問題或正確的。 ''只是更新的語法,我相信它可以在'php.ini'中啓用或禁用。 (對不起,復活這個) –

相關問題