使用spl_autoload_register包含错误

时间:2015-01-21 18:10:06

标签: php html autoload

我的PHP代码中有一个奇怪的错误。 我这样使用spl_autoload_register:

function load($class) {
    require 'class/' . $class . '.php';
}
spl_autoload_register('load');

然后在我的页面上,当我尝试加载一个类时,整个页面再次加载。 这就是我写的:

<?php include('inc/header.php'); ?>
<body>
<?php include('inc/nav.php'); ?>
[some html]
<?php load('Class'); ?>
[otherhtml]
<?php include('inc/footer.php') ?>

但是当我尝试在我的本地服务器上运行它时(使用xampp),整个页面再次被包含在内,它看起来像这样:

[header]
<body>
[nav]
[some html]
    [header]
    <body>
    [nav]
    [some html]
    [other html]
    [footer]
[other html]
[footer]

我得到一些php错误,主要是因为标题包含两次:

  

会话已经开始 - 忽略session_start()。

  

致命错误:无法重新声明load()(之前声明为   C:... inc \ header.php:2)在第4行的C:... inc \ header.php

仅在xampp上运行时才会发生这种情况。我将所有内容上传到我的网络服务器,没有任何问题。它在两天前工作正常,可能在我尝试使用phpstorm安装composer时开始。

任何帮助将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:1)

spl_autoload_register的优点是不需要调用函数来包含类XY,因为如果一个实例化类XY但尚未声明(包含),则会触发注册的自动加载器。

在上面的代码中,首先声明加载函数,注册它,然后调用加载函数。

这是你的代码:

<?php include('inc/header.php'); ?>
<body>
<?php include('inc/nav.php'); ?>
[some html]
<?php load('Class'); ?>
[otherhtml]
<?php include('inc/footer.php') ?>

但是当使用spl_autoload_register时我会使用以下内容:

<?php include('inc/header.php'); ?>
<body>
<?php include('inc/nav.php'); ?>
[some html]
new Load();
[otherhtml]
<?php include('inc/footer.php') ?>

差异在第5行。

关于您遇到的两个错误:我完全同意马里奥的回复。