5 betiğim var, diyelim ki: database.php, parent.php, child1.php, child2.php ve somescript.php
parent.php sınıfı şu şekilde görünür:
include 'database.php';
class Parent {
public $db;
function __construct() {
$this->db = new Database();
}
}
child1 ve child2 sınıfları şu şekilde görünür:
include 'parent.php';
class Child1 extends Parent {
function __construct() {
parent::__construct();
}
function useDb() {
$this->db->some_db_operation();
}
}
Sorun
Hem child1 hem de child2'yi somescript.php'ye dahil etmeye çalıştığımda aşağıdaki hatayı döndürüyor:
Veritabanı sınıfını bildiremez çünkü bu ad zaten database.php satır 4 (bu satır 'class Database' kelimelerini içerir)
Ancak yalnızca tek bir dosyayı (child1 veya child2) dahil edersem, harika çalışıyor.
Bunu nasıl düzeltebilirim?
include_once()]1 veya require_once() kullanmak istiyorsunuz. Diğer bir seçenek de tüm sınıflarınızı doğru sırayla içeren ek bir dosya oluşturmaktır, böylece sınıfların kendi include'lerini çağırmalarına gerek kalmaz:
"classes.php"
include 'database.php';
include 'parent.php';
include 'child1.php';
include 'child2.php';
O zaman sadece ihtiyacın var:
require_once('classes.php');
Bu sorunu daha önce de yaşadım ve bunu düzeltmek için, Sadece emin olun:
Benim sorunum (daha önce) :
Sınıfım vardı: Core, Router, Permissions ve Render
Core, Router sınıfını içerir, Router daha sonra Permissions sınıfını çağırır, ardından Router __destruct, Render sınıfını çağırır ve "Cannot declare class because the name is already in use" hatası ortaya çıkar.
Çözüm: Permission sınıfına destruct ekledim ve destruct boştu ve düzeltildi...