Jump to content
Fórum Script Brasil
  • 0

Problema ao chamar classe/método construtor


Carol Correa

Question

Boa noite, sou iniciante em PHP e estou orientando a objetos um sisteminha que comecei a desenvolver no semestre passado da minha faculdade.

Mas estou com um problema, se alguém souber como me ajudar, ficaria muito grata.

Acontece o seguinte, tenho meu formulário de cadastro que chama uma página PHP que pega os dados do formulário (<form action="cidadeGerencia.php" ...)

Essa pagina, cidade gerencia cria um objeto da minha classe cidade, adicionando os dados do formulário e chama a página que inclui ou altera os dados dos bancos. Meu problema é nessa pagina "cidadeGerencia", vou colar o código para explicar melhor.

<?php
include_once ("../../classes/cidade.class.php");
include_once ("../../banco_de_dados/cidade.bd.php");

class cidadeGerencia{
    public function cidadeGerencia(){
        $opcao = $_POST['opcao'];
        
        switch($opcao){
            case 'Incluir':{
                cadastrar();
                break;
            }
            case 'Alterar':{
                alterar();
                break;
            }
        }        
    }
    
    public function cadastrar(){
        $cidade = new cidade();
        $cidadeBD = new cidadeBD();
    
        $cidade->setCep($_POST['cep']);
        $cidade->setNome($_POST['nome']);
        $cidade->setEstado($_POST['estado']);
    
        if($cidadeBD->Incluir($cidade)==true){
            //header( "Location: ../view/ok.html" );
            echo "&lt;script type='text/javascript'> alert('Dados inseridos com sucesso!'); 
            window.location.href='cadastroCidade.php'; </script>";
        } else {
            //header( "Location: ../view/erro.html" );
            echo "&lt;script type='text/javascript'> alert('Erro ao gravar dados!'); 
            window.location.href='cadastroCidade.php'</script>";
        }
    }
    
    public function alterar(){
        $cidade = new cidade();
        $cidadeBD = new cidadeBD();
    
        $cidade->setCep($_POST['cep']);
        $cidade->setNome($_POST['nome']);
        $cidade->setEstado($_POST['estado']);
    
        if($cidadeBD->Alterar($cidade)==true){
            //header( "Location: ../view/ok.html" );
            echo "&lt;script type='text/javascript'> alert('Dados alterados com sucesso!'); 
            window.location.href='cadastroCidade.php'; </script>";
        } else {
            //header( "Location: ../view/erro.html" );
            echo "&lt;script type='text/javascript'> alert('Erro ao alterar dados!'); 
            window.location.href='cadastroCidade.php'</script>";
        }
    }
}
?>
O meu problema é que, o formulário chama esta página, mas não "entra" na classe ou no método construtor dela, então não acontece nada. Sei que o problema está na hora de "chamar" a classe ou o construtor da classe, e não com minhas funções, porque se eu deixar o código fora da classe da certo. Assim:
<?php
include_once ("../../classes/cidade.class.php");
include_once ("../../banco_de_dados/cidade.bd.php");


$cidade = new cidade();
$cidadeBD = new cidadeBD();
    
$cidade->setCep($_POST['cep']);
$cidade->setNome($_POST['nome']);
$cidade->setEstado($_POST['estado']);
    
if($cidadeBD->incluir($cidade)==true){
    //header( "Location: ../view/ok.html" );
    echo "&lt;script type='text/javascript'> alert('Dados inseridos com sucesso!'); 
    window.location.href='cadastroCidade.php'; </script>";
} else {
    //header( "Location: ../view/erro.html" );
    echo "&lt;script type='text/javascript'> alert('Erro ao gravar dados!'); 
    window.location.href='cadastroCidade.php'</script>";
}
?>

desse modo já testei e funcionou perfeitamente.

Também testei colocando o código da função direto no switch, e no método construtor da classe. Nenhum desses modos funcionou.

Então o problema não é com minha função ou com o switch.

Não sei o que fazer pra solucionar isso, se alguém souber uma solução, ou então descobrir o que estou fazendo de errado, por favor me dê uma luz.

Muito obrigada desde já.

Edited by Carol Correa
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Você tem uma classe que não está sendo instanciada

class cidadeGerencia{
    public function cidadeGerencia(){
        $opcao = $_POST['opcao'];
        
        switch($opcao){
            case 'Incluir':{
                cadastrar();
                break;
            }
            case 'Alterar':{
                alterar();
                break;
            }
        }        
    }

Link to comment
Share on other sites

  • 0

Prezados Amigos do Forum,

estou quase com o mesmo problema, se ele não for igual e estou precisando da ajuda de vc's para resolver este meu pequeno pro.

é o seguinte criei uma classe abstrata para ficar responsável pela conexão ao BD, como classes abstratas não podem ser instanciadas, somente estendidas eu criei uma classe para estender a classe responsável pela conexão ao BD, após isso eu criei uma classe figurativa para testar essa conexão mais o problema é o seguinte.

segue meu código da pagina da pagina figurativa para teste.

<?php

if(file_exists("../../conexao/class.conexao.php")){

require_once("../../conexao/class.conexao.php");

}else{

echo "<script>alert('Arquivo no existe');</script>";

}

$test = new con();

class CadastroNegocio{

function __construct(){

echo "este";

}

}

?>

se eu deixar o ($test = new con();) fora de uma classe ele funciona corretamente eu vejo a msg que a conexão foi bem sucedida. Mais se eu colocar ele dentro da classe nada acontece, então ao debugar eu vi que o programa é executado mais não entra na classe. alguém pode me ajudar com isso por favor.

desde já obrigado a todos.

Link to comment
Share on other sites

  • 0

você pode instancioar uma classe dentro de uma função de outra classe...

não uma classe / função dentro de classe.

exemplo

Class.Conexao

Class Conexao {

private $instancia;

public function conectar() {

$instancia = parametro para conexao

}

}
Class.Cadastro
include_once Class.Conexao.php

Class cadastro {

private $string;

public function inserir(){

$dbh = new Conexao();
$dbh->conectar();

$qry = mysql_query($this->string);

}

}

Link to comment
Share on other sites

  • 0

entendi mais olha ai meu codigo pode ser que você possa ver melhor o erro porque eu não estou vendo.

<?php

if(file_exists("Class.UsuarioEntidades.php")){

require_once("Class.UsuarioEntidades.php");

}

else{

echo("<string>alert('Arquivo Class.UsuarioEntidades.php no existe!');</string>");

exit();

}

class UsuarioNegocio{

public function __construct(){

$this->teste();

}

public function teste(){

$usuario = new UsuarioEntidades();

}

}

?>

quando o breakPoint para em cima da classe ele salta para o final final da classe e não entra nela.

desde já obrigado por toda ajuda.

Link to comment
Share on other sites

  • 0

Thiagocoloque sue código entre a tag de

[CODE.] [./CODE] (sem o ponto) para melhor vizualiar...

certo..

na sua condição coloque isto e me diga o que mostra na tela.

<?php
if(file_exists("Class.UsuarioEntidades.php")) {
//require_once("Class.UsuarioEntidades.php");
echo "Arquivo Entidade Existe";
} else {
echo "Não existe arquivo Entidades.php"
exit();
}


?>

Link to comment
Share on other sites

  • 0

<?php
    if(file_exists("Class.UsuarioEntidades.php")){
       //require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }
    else{
       echo("<string>alert('Arquivo Class.UsuarioEntidades.php não existe!');</string>");
       exit();
    }

$usuario = new UsuarioEntidades();

class UsuarioNegocio{

    private $usuario = NULL;
    
    public function __construct(){
        $this->teste();
    }
    
    public function teste(){
        $usuario = new UsuarioEntidades();
    }
}
?>
opa apresentou um erro ao colocar ( $usuario = new UsuarioEntidades(); ) esse trecho de codigo fora da classe. o tratamento abaixo exibe uma msg que o arquivo existe mais no momento de instanciar apresenta a mensagem (Fatal Erro class UsuarioEntidades not found) .
if(file_exists("Class.UsuarioEntidades.php")){
       //require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }

agora é que complicou de vez.

desculpa ai amigão estar perturbando é que quando quero aprender uma coisa só sossego quando aprendo.

Link to comment
Share on other sites

  • 0

A mensagem que deu por não instanciar está correta....

<?php
    if(file_exists("Class.UsuarioEntidades.php")){
       require_once("Class.UsuarioEntidades.php");
       echo "Arquivo Entidade Existe";
    }
    else{
       echo("<string>alert('Arquivo Class.UsuarioEntidades.php não existe!');</string>");
       exit();
    }

class UsuarioNegocio{

    private $usuario = NULL;
    
    public function __construct(){
        $this->teste();
    }
    
    public function teste(){
        $usuario = new UsuarioEntidades();
        
    }
}
?>

Tenta assim agora, se não der erro e funcionar, me avisa que ai vou te explicar.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...