如何使用其他文件中的PHP类

Xhy*_*ynk 41 php

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

class.php

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

这是一个非常有用的例子,但是我想说我想用:

$vars = new IUarts(); 
print($vars->data);`
Run Code Online (Sandbox Code Playgroud)

在我的page.php文件中; 我该怎么做呢?如果我这样做,include(LIB.'/class.php');就会对我大喊大叫并给我Fatal error: Cannot redeclare class IUarts in /dir/class.php on line 4

Mar*_*val 62

你可以使用include/ include_oncerequire/require_once

require_once('class.php');
Run Code Online (Sandbox Code Playgroud)

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

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

$vars = new IUarts(); 
print($vars->data);    
?>
Run Code Online (Sandbox Code Playgroud)

它还可以__autoload在包含在每个文件中的库中添加该函数utils.php.

这篇文章也有一个很好的和不同的方法.

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

  • "__autoload()已被弃用,请改用spl_autoload_register()"因为谷歌的结果相当高,也许有人应该编辑它并更明确地指出这一点? (4认同)

Ry-*_*Ry- 8

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


Ric*_*ann 5

include_once改用.
此错误表示您已包含此文件.

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