53

class.phppage.php という2 つのファイルがあるとします。

class.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_onceまたはrequire/を使用できます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]ではなくinclude[_once]を使用する必要があります。違いはrequire、ファイルが存在しない場合に警告を発行するだけでなく、致命的なエラーが発生することです。)

于 2013-01-16T03:14:47.170 に答える
9

include_once代わりに使用してください。
このエラーは、このファイルが既に含まれていることを意味します。

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

于 2013-01-16T03:14:29.747 に答える