5つのスクリプトがあります。たとえば、database.php、parent.php、child1.php、child2.php、およびsomescript.phpがあります。
parent.phpクラスは次のようになります。
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
child1およびchild2クラスは次のようになります。
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
問題
Somescript.phpにchild1とchild2の両方を含めると、次のエラーが返されます。
クラスDatabaseを宣言することはできません。名前はすでに4行目のdatabase.phpで使用されているためです(これは「class Database」という単語を含む行です)
ただし、1つのファイル(child1またはchild2)のみを含めると、うまく機能します。
どうすれば修正できますか?
include_once() または require_once() を使用する場合。他のオプションは、すべてのクラスインクルードが正しい順序で追加ファイルを作成し、インクルード自体を呼び出す必要がないようにすることです。
「classes.php」
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
次に、あなただけが必要です:
require_once('classes.php');
include
またはrequire
の代わりにinclude_once
またはrequire_once
を使用してみてください
Include_onceまたはrequire_onceの別のオプションは、クラスのオートロードを使用することです。 http://php.net/manual/en/language.oop5.autoload.php
私は前にこの問題を抱えていましたが、これを修正するために、ただ確認してください:
私の問題(前):
[。登場しました。
解決 :
Permissionクラスに__destructを追加しましたが、__ destructは空で、修正されました...