PDA

View Full Version : Cannot declare class Topic, because the name is already in use


Frenky-90
20-03-2019, 10:59
Ciao ragazzi perchè
quando instanzio la class Topic solo in un "controller" topics.php va tutto liscio come l'olio.
Quando invece instanzio la classe in un' altro controller nome topic.php(che mi gestisce il singolo topic) mi dà questo errore

Cannot declare class Topic, because the name is already in use

esempio nel model topic.php

<?php require('core/init.php'); ?>

<?php
//Create Topic Object
$topic = new Topic;

//Get ID From URL
$topic_id = $_GET['id'];

//Get Template & Assign Vars
$template = new Template('templates/topic.php');

//Assign Vars
$template->topic = $topic->getTopic($topic_id);
$template->replies = $topic->getReplies($topic_id);
//$template->title = $topic->getTopic($topic_id)->title;

//Display template
echo $template;


nell'init.php l'autoload sembra che sta fatto ok.

<?php
//Start Session
session_start();

//Include Configuration
require_once('config/config.php');

//Helper Function Files
require_once('helpers/system_helper.php');
require_once('helpers/format_helper.php');
require_once('helpers/db_helper.php');

//Autoload Classes
//Autoload Core Libraris
spl_autoload_register(function($className){
require_once("libraries/".$className.".php");
});


Perchè fà cosi? Grazie

Kaya
20-03-2019, 11:24
Ho l'impressione che ridichiari la classe topic una seconda volta, cosa che non puoi fare perchè quel nome è già in uso.
Controlla il flusso degli include..

Frenky-90
20-03-2019, 15:00
praticamente per non avere più l'errore ho dovuto rinominare la template single.php invece che topic.php

Sembra come se avendo la template topic.php, desse un errore di ripetizione :fagiano: :fagiano: :eek:
come è possibile?

Kaya
21-03-2019, 08:20
praticamente per non avere più l'errore ho dovuto rinominare la template single.php invece che topic.php

Sembra come se avendo la template topic.php, desse un errore di ripetizione :fagiano: :fagiano: :eek:
come è possibile?

Forse perchè ricarichi due volte lo stesso file php?
Non avendo sotto mano tutto lo script, mi viene da pensare che quando richiami
new Template('templates/topic.php');
topic.php sia già stato caricato, forse da init.php?

Frenky-90
21-03-2019, 22:27
Nell' init che ho postato non si vede l autoload. L autoload mi carica i model. Tra i modelli c'è quello che si chiama Topic.php
Template è una classe che passa il Path della view nel costruttore e poi con il __toString fa la include di quella view e stampa l oggetto

Kaya
22-03-2019, 08:25
A questo punto direi di andare in debug e mettere un breakpoint sulla linea indicata dall'errore

Frenky-90
22-03-2019, 12:14
Alla fine come detto ho cambiato nome alla view così siamo in pace :rolleyes: .. grazie comunque dell' aiuto ... Saluti e alla prossima