Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Eduardo Monteiro

Problemas ao carregar as classes no PHP

Recommended Posts

Possuo Duas Classes, uma eu chamo de comando e a outra é usuario.

Arquivo autoload.php

<?php
function my_autoload($pClassName) {
	define ( "__DIR__", "classes" );
	require_once (__DIR__ . "/" . $pClassName . ".class.php");
}

?>

Classe Usuario:

<?php
class Usuario {
	private $codigousuario;
	private $nomecompleto;
	private $email;
	private $login;
	private $senha;
	public function setNomecompleto($nome) {
		$this->nomecompleto = trim ( $nome );
	}
	public function getNomecompleto() {
		return $this->nomecompleto;
	}
	public function setEmail($email) {
		$this->email = trim ( $email );
	}
	public function getEmail() {
		return $this->email;
	}
	public function setLogin($login) {
		$this->login = trim ( $login );
	}
	public function getLogin() {
		return $this->login;
	}
	
	public function setSenha($senha){
		$this->senha=md5(trim($senha));
	}
	
	public function getSenha() {
		return $this->senha;
	}
}
?>

Classe comando

<?php
class comando {
	private $select;
	private $update;
	private $delete;
	private $insert;
	public function setComandos($tabela) {
		$this->select = "SELECT * FROM $tabela ";
		$this->update = "UPDATE $tabela SET ";
		$this->delete = "DELETE FROM $tabela ";
		$this->insert = "INSERT INTO $tabela ";
	}
	public function getSelect() {
		return $this->select;
	}
	public function getUpdate() {
		return $this->update;
	}
	public function getInsert() {
		return $this->insert;
	}
	
	public function getDelete(){
		return $this->delete;
	}
}

?>

Arquivo newuser.php

<?php

include_once "../autoload.php";

spl_autoload_register ( "my_autoload");
$nomecompleto = trim ( $_POST ['nomecompleto'] );
$email = trim ( $_POST ['email'] );
$login = trim ( $_POST ['usuario'] );
$senha = trim ( $_POST ['senha'] );

$select = new comando ();

$usuario = new Usuario ();
$usuario->setNomecompleto ( $nomecompleto );
$usuario->setEmail ( $email );
$usuario->setLogin ( $login );
$usuario->setSenha ( $senha );

echo $usuario->getNomecompleto () . "<br/>";
echo $usuario->getEmail () . "<br/>";
echo $usuario->getLogin () . "<br/>";
echo $usuario->getSenha () . "<br/>";


$select->setComandos ( "USUARIO" );
echo $select->getSelect ();

?>

Após executar este codigo, o browser mostra a mensagem de erro:Notice: Constant __DIR__ already defined in C:\dashboard\autoload.php on line 3

 

Alguém pode me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é que o define está dentro da função autoload.

 

Ela é chamada sempre que você instancia a classe, ou seja você tenta definar uma constante varias vezes.

Oq não deveria acontecer.

 

 

Resumo:

Para sanar o problema deixe o trecho

define ( "__DIR__", "classes" );

fora da função autoload.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução do seu problema está no post #2. Entretanto, é fortemente aconselhável utilizar a PSR-4 para fins de autoload:

http://www.php-fig.org/psr/psr-4/

 

Nos demais links, há explicações sobre namespaces e autoload psr-4:

http://forum.imasters.com.br/topic/543406-duvida-sobre-namespace/

http://forum.imasters.com.br/topic/540272-criando-sistema-com-mvc/

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por junior almeida
      tenho a seguinte hierarquia de arquivos
       
      projeto
          app
              login.php
          classes
              dbFunctions.php
       
       
          dbFunction.php
      use classes\db; namespace classes;  
       
      login.php
      use classes\dbFunctions;  
      no meu arquivo login.php que esta dentro da pasta app preciso incluir o arquivo dbFunctions.php que esta na pasta classes, da maneira acima ele não consegue carregar o arquivo. é possível voltar um diretório usando o use ?
      exemplo
       
      use \..\classes\dbFunctions;  
       
    • Por BrunoBit
      Fala rapaziada.
      Sabem como faço pra dizer pro autoload qual classe ele deve carregar e qual não deve? Eu sei que utilizando o use a gente consegue definir, porém estou com um problema, pq eu to usando o PHPMailer e o autoload ta querendo carregar automaticamente a classe Exception não sei pq.
      Veja como está o código:
      minha classe email onde instancio new PHPMailer():
      namespace classes; require_once("autoload/autoload.php"); use mailer\PHPMailer; // painel/mailer/PHPMailer.php class email { private $mail; public function __construct(){ $this->mail = new PHPMailer(); } } Só que agora vem o problema, dentro do arquivo PHPMailer.php existem 2 classes:
      class PHPMailer{ [code...] } class phpmailerException extends Exception { [code...] } O meu autoload, onde eu uso pra chamar o PHPMailer, ta querendo carregar também a classe Exception que phpmailerException está extendendo, não faço ideia do pq LOL
      Alguém sabe?
       
      Erro:
      PHP Fatal error: Class 'mailer\Exception' not found in  
      Desde já agradeço rapaziada, abração e fiquem com Deus.
    • Por BrunoBit
      Fala rapaziada.
      Estou com um problema aqui referente ao spl_autoload_register, o autoload ta querendo carregar o PDO, eu já utilizei a contra barra "new \PDO", mas mesmo assim está querendo carregar o PDO. Alguém tem ideia do pq?

      PHP Fatal error:  Uncaught exception 'Exception' with message 'File /home/meusite/public_html/painel/classes/PDO.php not found in the path' in /home/meusite/public_html/painel/autoload/autoload.php:6
       
      Desde já agradeço a ajuda, feliz natal pra todos vocês e fiquem com Deus.
    • Por Fernanda Laila
      Eu upei uma api completa em meu site, mas ao acessar eu recebo o seguinte erro
      Fatal error: require(): Failed opening required'/home/u602534290/public_html/../vendor/autoload.php' (include_path='.:/opt/php-5.6/pear') in/home/u602534290/public_html/index.php on line 12
      Alguém sabe o que possa ser
    • Por eronventer
      Estou atualizando as classes de um projeto utilizando namespace porém estou com dificuldades em estender classes de diferentes diretórios. No exemplo o que eu preciso é ter acesso a classe Connection na classe Users para executar insert, update, etc... Então como posso resolver?
       
      Em /core/classes/connection/src/Connection/Connection.php
      namespace Connection; class Connection extends \mysqli { public function __construct() { //Conexão } }  
      Em /core/libraries/Users.php
      class Users extends Connection { public function __construct() { parent::__construct(); } }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.