[Resolvido] Erro ao carregar classe
Os códigos são os seguintes:
#Os namespaces seguem a estrutura do diretório onde está a classe.
<?php
namespace classes\utilities;
interface InterfaceController {
public function insert($object, $link_connection);
public function delete($object, $link_connection);
public function update($object, $link_connection);
public function select($id);
public function selectAll($link_connection);
}
?>
<?php
namespace classes\controllers;
use classes\models\Student;
#use classes\utilities\InterfaceController;
class StudentController/ implements InterfaceController /{
private $contactController;
private $filiationController;
public function __construct() {
$this->contactController = new ContactController();
$this->filiationController = new FiliationController();
}
public function delete($object, $link_connection) {
}
public function selectAll($link_connection) {
}
public function insert(Student $object, \PDO $link_connection) {
try {
$prepare = $link_connection->prepare("insert into student(name, registration)
values(:name, :registration)");
$prepare->execute(array(
":name" => $object->getName(),
":registration" => $object->getRegistration()
));
$object->setId($link_connection->lastInsertId());
$this->contactController->insert($object, $link_connection);
$this->filiationController->insert($object, $link_connection);
} catch (Exception $e) {
return $e;
}
}
public function select($id) {
}
public function update($object, $link_connection) {
}
}
?>
#esse é o index.php onde tudo isso é executado
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
começou <br/> <br/>
<?php
spl_autoload_register(function ($class) {
require_once str_replace("\\", "/", $class . '.php');
# essas três últimas linhas são para mostrar quando as classes param de ser carregadas
echo "arquivo -> " . str_replace("\\", "/", $class . '.php') . "<br/>";
echo "namespace -> " . $class . "<br/>";
echo "<br/>";
});
use classes\utilities\ConnectionManager;
use classes\models\Contact;
use classes\models\Filiation;
use classes\models\Student;
use classes\controllers\StudentController;
$pdo = ConnectionManager::getConnection();
$student = new Student();
$contact = new Contact();
$filiation = new Filiation();
$studentController = new StudentController();
try {
$pdo->beginTransaction();
$filiation->setFather("Father Exemplo")->setMother("Mother Exemplo");
$contact->setCell_phone("1234-5678")->setEmail("exemplo@email.com");
$student->setContact($contact)->setFiliation($filiation)
->setName("Exemplo")->setRegistration("2011A45");
$studentController->insert($student, &$pdo);
$pdo->commit();
echo "sucesso" . "<br/>";
} catch (Exception $e) {
echo $e->getMessage() . "<br/>";
echo "arquivo " . $e->getFile() . "<br/>";
echo "linha " . $e->getLine() . "<br/>";
$pdo->rollBack();
echo "falhou!" . "<br/>";
}
ConnectionManager::closeConnection($pdo);
?>
terminou
</body>
</html>
Com essas linhas comentadas, tudo funciona.
#use classes\utilities\InterfaceController;
class StudentController /implements InterfaceController /{
O resultado impresso por autload é esse:
começou
arquivo -> classes/utilities/ConnectionManager.php
namespace -> classes\utilities\ConnectionManager
arquivo -> classes/models/Student.php
namespace -> classes\models\Student
arquivo -> classes/models/Contact.php
namespace -> classes\models\Contact
arquivo -> classes/models/Filiation.php
namespace -> classes\models\Filiation
arquivo -> classes/controllers/StudentController.php
namespace -> classes\controllers\StudentController
arquivo -> classes/controllers/ContactController.php
namespace -> classes\controllers\ContactController
arquivo -> classes/controllers/FiliationController.php
namespace -> classes\controllers\FiliationController
sucesso
terminou
Com o trecho supracitado descomentado, o resultado é esse:
começou
arquivo -> classes/utilities/ConnectionManager.php
namespace -> classes\utilities\ConnectionManager
arquivo -> classes/models/Student.php
namespace -> classes\models\Student
arquivo -> classes/models/Contact.php
namespace -> classes\models\Contact
arquivo -> classes/models/Filiation.php
namespace -> classes\models\Filiation
arquivo -> classes/utilities/InterfaceController.php
namespace -> classes\utilities\InterfaceController
Ou seja, depois de carregar a classe InterfaceController.php, o programa encerra. Assim, sem mais nem menos!
Qual o mistério? Por que a interface bagunça tudo?
Discussão (7)
Carregando comentários...