Variable defined, but, shows as undefined

-1

I have the following code:

<?php

    // Lê conteúdo do txt
    $documento = 'TÍTULO I
    Dos Princípios Fundamentais

    Art. 1º A República Federativa do Brasil, formada pela união indissolúvel dos Estados e Municípios e do Distrito Federal, constitui-se em Estado Democrático de Direito e tem como fundamentos:

    I - a soberania;

    II - a cidadania

    III - a dignidade da pessoa humana;

    IV - os valores sociais do trabalho e da livre iniciativa;

    V - o pluralismo político.

    Parágrafo único. Todo o poder emana do povo, que o exerce por meio de representantes eleitos ou diretamente, nos termos desta Constituição.

    Art. 2º São Poderes da União, independentes e harmônicos entre si, o Legislativo, o Executivo e o Judiciário.

    Art. 3º Constituem objetivos fundamentais da República Federativa do Brasil:

    I - construir uma sociedade livre, justa e solidária;

    II - garantir o desenvolvimento nacional;

    III - erradicar a pobreza e a marginalização e reduzir as desigualdades sociais e regionais;

    IV - promover o bem de todos, sem preconceitos de origem, raça, sexo, cor, idade e quaisquer outras formas de discriminação.

    Art. 4º A República Federativa do Brasil rege-se nas suas relações internacionais pelos seguintes princípios:

    I - independência nacional;

    II - prevalência dos direitos humanos;

    III - autodeterminação dos povos;

    IV - não-intervenção;

    V - igualdade entre os Estados;

    VI - defesa da paz;

    VII - solução pacífica dos conflitos;

    VIII - repúdio ao terrorismo e ao racismo;

    IX - cooperação entre os povos para o progresso da humanidade;

    X - concessão de asilo político.

    Parágrafo único. A República Federativa do Brasil buscará a integração econômica, política, social e cultural dos povos da América Latina, visando à formação de uma comunidade latino-americana de nações.

    TÍTULO II
    Dos Direitos e Garantias Fundamentais
    CAPÍTULO I
    DOS DIREITOS E DEVERES INDIVIDUAIS E COLETIVOS

    Art. 5º Todos são iguais perante a lei, sem distinção de qualquer natureza, garantindo-se aos brasileiros e aos estrangeiros residentes no País a inviolabilidade do direito à vida, à liberdade, à igualdade, à segurança e à propriedade, nos termos seguintes:

    I - homens e mulheres são iguais em direitos e obrigações, nos termos desta Constituição;

    II - ninguém será obrigado a fazer ou deixar de fazer alguma coisa senão em virtude de lei;

    III - ninguém será submetido a tortura nem a tratamento desumano ou degradante;';


    function romano($romano) {
      switch (trim(strip_tags($romano))){
        case 'I':
          $romano = '1';
          break;
        case 'II':
          $romano = '2';
          break;
        case 'III':
          $romano = '3';
          break;  
        case 'IV':
          $romano = '4';
          break;
        case 'V':
          $romano = '5';
          break; 
        case 'VI':
          $romano = '6';
          break; 
        case 'VII':
          $romano = '7';
          break;
        case 'VIII':
          $romano = '8';
          break;
        case 'IX':
          $romano = '9';
          break;  
        case 'X':
          $romano = '10';
          break;   
        case 'XI':
          $romano = '11';
          break; 
        case 'XII':
          $romano = '12';
          break;     
        case 'XIII':
          $romano = '13';
          break;     
        case 'XIV':
          $romano = '14';
          break;  
        case 'XV':
          $romano = '15';
          break; 
        case 'XVI':
          $romano = '16';
          break; 
        case 'XVII':
          $romano = '17';
          break;     
        case 'XVIII':
          $romano = '18';
          break;     
        case 'XIX':
          $romano = '19';
          break;  
        case 'XX':
          $romano = '20';
          break;                                                
        case 'ÚNICO':
          $romano = '_unico';
          break;  
        case 'COMPLEMENTAR':
          $romano = '_complementar';
          break;
        case 'G':
          $romano = '_geral';
          break;  
        case 'E':
          $romano = '_especial';
          break;                                                                                                                                               
       default:
          $romano = '_especial';
      }
      return $romano;
    } 


    function concatena($concatenaHierarquia) {

        if ($contatenaParte = 1) {
          $concatenaHierarquia .= $valorParte;
        }
        if ($contatenaLivro = 1) {
          $concatenaHierarquia .= $valorLivro;
        }
        if ($contatenaTitulo = 1) {
          $concatenaHierarquia .= $valorTitulo;
        }
        if ($contatenaSubtitulo = 1) {
          $concatenaHierarquia .= $valorSubtitulo;
        }
        if ($contatenaCapitulo = 1) {
          $concatenaHierarquia .= $valorCapitulo;
        }
        if ($contatenaSecoes = 1) {
          $concatenaHierarquia .= $valorSecao;
        }
        if ($contatenaSubsecoes = 1) {
          $concatenaHierarquia .= $valorsubsecao;
        }
        if ($contatenaArtigos = 1) {
          $concatenaHierarquia .= $valorArtigo;
        }

        return $concatenaHierarquia;
    }

    // Variável das palavras chaves
    $encontraParte = "P A R T E";
    $encontraLivro = "LIVRO";
    $encontraTitulo = "TÍTULO";
    $encontraSubtitulo = "SUBTÍTULO";
    $encontraCapitulo = "CAPÍTULO";
    $encontraSecao = "Seção";
    $encontraSubsecao = "Subseção";
    $encontraArtigo = "Art.";
    $concatenaHierarquia = "";


    $valorParte = "";
    $valorLivro = "";
    $valorTitulo = "";
    $valorSubtitulo = "";
    $valorCapitulo = "";
    $valorSecao = "";
    $valorsubsecao = "";
    $valorArtigo = "";


    $documento = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $documento);
    // Converte em linhas
    $linhas = explode("\n", $documento);

    foreach ($linhas as $novalinha) {

      // Envolve cada linha em um parágrafo
      $novalinhas =   "<li><p>" . $novalinha . "</p></li>"; 

     // Verifica se tem o texto Linha na linha
     $procuraParte = strpos($novalinhas,$encontraParte);

     if ($procuraParte === false){
      $contatenaPars = 0;
     // Verifica se tem o texto Linha na linha
     $procuraLivro = strpos($novalinhas,$encontraLivro);

     if ($procuraLivro === false){
      $contatenaLivs = 0;
       // Verifica se tem o texto título na linha
       $procuraTitulo = strpos($novalinhas,$encontraTitulo);

       if ($procuraTitulo === false){
        $contatenaTits = 0;
         // Verifica se tem o texto Subtítulo na linha
         $procuraSubtitulo = strpos($novalinhas,$encontraSubtitulo);

         if ($procuraSubtitulo === false){
          $contatenaSubtits = 0;
            // Verifica se tem o texto capítulo na linha
            $procuraCapitulo = strpos($novalinhas,$encontraCapitulo);

            if ($procuraCapitulo === false){
            $contatenaCaps = 0;
             // Verifica se tem o texto Seção na linha
             $procuraSecao = strpos($novalinhas,$encontraSecao);

             if ($procuraSecao === false){
              $contatenaSecoes = 0;
                // Verifica se tem o texto Subseção na linha
                $procuraSubsecao = strpos($novalinhas,$encontraSubsecao);

                if ($procuraSubsecao === false){
                $contatenaSubsecoes = 0;
                   // Verifica se tem o texto Artigo na linha
                   $procuraArtigo = strpos($novalinhas,$encontraArtigo);

                   if ($procuraArtigo === false){
                    $contatenaArtigos = 0;
                      echo $novalinhas;      

                   } else {

                      $contatenaArtigos = 1;
                      // Captura o número do artigo para atribuir na ID                  
                      $artigo =  explode(" ", $novalinhas);

                      $caracteres = array("º",".");

                      $artigos = str_replace($caracteres, "", $artigo[1]);

                      $valorArtigo = 'artigo' . $artigos;

                      echo "</ul>";        
                      echo '<ul id="' . $valorArtigo . '" class="artigo">';                   
                      echo $novalinhas;

                      $valorArtigo = 'artigo' . $artigos;

                      echo "Concatena: " . concatena($concatenaHierarquia);                  
                   }     

                } else {

                  $contatenaSubsecao = 1;
                   // Captura o número romano da Subseção para atribuir na ID
                  $subsecao =  explode(" ", $novalinhas);
                  $caracteres = array("Subseção");
                  $subsecoes = romano($subsecao[1]);   

                  $valorSubsecoes = 'subsecao' . $subsecoes;

                  echo "</ul>";        
                  echo '<ul id="' . $valorSubsecoes . '" class="subsecao">';                     
                  echo $novalinhas;  

                  echo "Concatena: " . concatena($concatenaHierarquia);                 
                }    

             } else {

                  $contatenaSecao = 1;
                   // Captura o número romano da Subseção para atribuir na ID
                  $secao =  explode(" ", $novalinhas);
                  $caracteres = array("Seção");
                  $secoes = romano($secao[1]);   

                  $valorSecoes = 'secao' . $secoes;

                  echo "</ul>";        
                  echo '<ul id="' . $valorSecoes . '" class="secao">';                      
                  echo $novalinhas;    

                  echo "Concatena: " . concatena($concatenaHierarquia);                  
             }     

          } else {

                  $contatenaCapitulo = 1;
                   // Captura o número romano da Subseção para atribuir na ID
                  $cap =  explode(" ", $novalinhas);
                  $caracteres = array("CAPÍTULO");
                  $caps = romano($cap[1]);  

                  $valorCapitulo = 'capitulo' . $caps;

                  echo "</ul>";        
                  echo '<ul id="' .  $valorCapitulo . '" class="capitulo">';                      
                  echo $novalinhas;  

                  echo "Concatena: " . concatena($concatenaHierarquia);                 
        }

       } else {

                  $contatenaSubtitulo = 1;
                  $subtit =  explode(" ", $novalinhas);
                  $caracteres = array("SUBTÍTULO");
                  $subtits = romano($subtit[1]);  

                  $valorSubtitulo = 'subtitulo' . $subtits;

                  echo "</ul>";        
                  echo '<ul id="' . $valorSubtitulo . '" class="subtitulo">';                      
                  echo $novalinhas; 

                  echo "Concatena: " . concatena($concatenaHierarquia);                 
       } 

     } else {

                  $contatenaTitulo = 1;
                  $tit =  explode(" ", $novalinhas);
                  $caracteres = array("TÍTULO");
                  $tits = romano($tit[1]);  

                  $valorTitulo = 'titulo' . $tits;

                  echo "</ul>";        
                  echo '<ul id="' . $valorTitulo  . '" class="titulo">';                      
                  echo $novalinhas; 

                  echo "Concatena: " . concatena($concatenaHierarquia);                            
       } 

     } else {

                  $contatenaLivro = 1;
                  $liv =  explode(" ", $novalinhas);
                  $caracteres = array("LIVRO");
                  $livs = romano($liv[1]);  

                  $valorLivro = 'livro' . $livs;

                  echo "</ul>";        
                  echo '<ul id="' . $valorLivro . '" class="livro">';                      
                  echo $novalinhas;

                  echo "Concatena: " . concatena($concatenaHierarquia);  
                  }
       } else {

                  $contatenaParte = 1;
                  $par =  explode(" ", $novalinhas);
                  $caracteres = array("PARTE");
                  $pars = romano($par[8]); 

                  $valorParte = 'parte' . $pars;

                  echo "</ul>";        
                  echo '<ul id="' . $valorParte. '" class="parte">';                      
                  echo $novalinhas;   

                  echo "Concatena: " . concatena($concatenaHierarquia);                                           
       }

    }

    ?>

Return this error:

  

PHP Notice: Undefined variable: valuePart in /home/5DUrnw/prog.php on line 155

It tells me that the variable was not defined, but in line 194, I defined it

Does anyone know why?

DEMO

    
asked by anonymous 01.05.2015 / 02:37

2 answers

4

The problem is the scope of your variables, they must be passed as an argument in your function if it does not happen, even if the name is the same.

$valorParte = ""; defined here is not the same as found in your function ( $concatenaHierarquia .= $valorParte;

Variables defined in the script are global, those defined in a function are only available within it.

The function signature should look like this:

function concatena($concatenaHierarquia, $valorParte,
    $valorLivro, $valorTitulo, $valorSubtitulo, $valorCapitulo,
    $valorSecao, $valorsubsecao, $valorArtigo) {
    
01.05.2015 / 02:43
1

You are trying to access from within a more internal function the variables of a more external function. This - when supported - is called closure , and although in many languages every function may be a closure , others require special syntax or even do not support closures at all.

In PHP you can transform a "normal" function into a closure , but you need to specify exactly which external function variables you want to capture:

$concatena = function ($concatenaHierarquia) use ($valorParte, $valorLivro,
                                                  $valorTitulo, $valorSubtitulo,
                                                  $valorCapitulo, $valorSecao,
                                                  $valorSubsecao, $valorArtigo) {

      if ($contatenaParte = 1) {
        $concatenaHierarquia .= $valorParte;
      }
      ...
};

Font

(Do not forget the ; at the end, since we are now assigning a function to a variable, not defining a named function.)

To call it, you must now use the variable name:

                ...
                $valorArtigo = 'artigo' . $artigos;

                echo "Concatena: " . $concatena($concatenaHierarquia);                  
             }

Example in ideone . Note: I did not check the output to see if everything is correct, because the code posted is too extensive in relation to what was asked. If there are more errors or other questions about it, I suggest opening a new question.

    
01.05.2015 / 07:18