53

假设我有两个文件class.phppage.php

类.php

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

这是一个非常基本的例子,但假设我想使用:

$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

4

5 回答 5

73

您可以使用include/include_oncerequire/require_once

require_once('class.php');

或者, 通过添加到使用自动加载page.php

<?php 
function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

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

它还可以将该__autoload函数添加到您包含在每个文件中的库中,例如utils.php.

还有这篇文章有一个很好的不同的方法。

高效的 PHP 自动加载和命名策略

于 2013-01-16T03:20:48.640 回答
12

在这种情况下,您似乎已经在某处包含了该文件。但是对于类文件,您应该真正“包含”它们require_once以避免这种情况;如果文件已经包含,它将不包含该文件。(并且您通常应该使用require[_once], not include[_once],不同之处在于require如果文件不存在会导致致命错误,而不是仅仅发出警告。)

于 2013-01-16T03:14:47.170 回答
9

改为使用include_once
这个错误意味着你已经包含了这个文件。

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

于 2013-01-16T03:14:29.747 回答
2

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

并且类应该使用<?php //code ?> not <? //code ?>

于 2015-11-30T04:43:49.617 回答
2

采用

require_once(__DIR__.'/_path/_of/_filename.php');

这也将有助于从不同的文件夹中导入文件。尝试extends继承该文件中的类并重用函数的方法

于 2019-10-25T04:59:23.860 回答