Ir para conteúdo

Arquivado

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

ThiagoLimah

Variável GLOBAL

Recommended Posts

Salve pessoal,

 

estou criando um sistema para o semestre de meu curso agora e me deparei com um "problema", preciso usar PDO e estou com um pequeno problema no escopo da variáveis, preciso que o link da conexão do PDO seja global. Algo assim:

 

global $conn;

$conn = new PDO();

 

Gostaria de poder acessar esta variavel $conn com os métodos do PDO em outros arquivos, pois o arquivo que realiza esta conexão será incluido nas outras páginas por require_once.

 

Espero ter sido claro.

Desde já agradeço

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

prq nao usa so o include =X

 

nao intendio porq da global;

 

conn.php

$conn = new PDO(/*______*/);

 

index.php

require_once dirname(__DIR__).'/conn.php';
var_dump($conn);

Compartilhar este post


Link para o post
Compartilhar em outros sites

prq nao usa so o include =X

 

nao intendio porq da global;

 

conn.php

$conn = new PDO(/*______*/);

 

index.php

require_once dirname(__DIR__).'/conn.php';
var_dump($conn);

Minha estrutura é mais ou menos assim:

 

database.php

  <?php    global $conn;    $conn = new PDO();  ?>

modal.class.php

 

  /**   * Aqui que eu preciso da conexão, mas não somente aqui!    */

index.php

 

  <?php  session_start();  require_once('libs/configs.php');  require_once('libs/database.php');  require_once('libs/functions.php');  require_once('libs/system/template.class.php');  require_once('libs/system/sistema.class.php');  require_once('libs/system/sessao.class.php');  require_once('libs/system/controller.class.php');  require_once('libs/system/model.class.php');    /**   * Função autoload do sistema. Responsável por instanciar nosso model   * caso ele exista.   *    * @param String $sArquivo    */  function __autoload($sArquivo) {        $sPatchModel = PAMPA_MVC_VIEW . $sArquivo . 'Model.php';    if (file_exists($sPatchModel)) {      require_once($sPatchModel);    }        }    /**   * Inicializa o Sistema    */  $oApp = new Sistema();  $oApp->run();  ?>

Só que nos outros scripts eu não consigo visualizar a variável $conn =(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas possibilidades, uma certa e outra, embora possível, totalmente errada no contexto do seu problema.

 

A certa é utilizar-se de um Singleton Registry. No fórum mesmo tem um "zibilhão" de tópicos sobre isso.

 

A errada, só é errada porque você está usando classes e, como métodos nada mais são do que funções dentro de um escopo de objeto, você precisa globalizar variáveis externas dentro deles.

 

Para isso, além do include com uma variável que armazene a instância da PDO, você precisaria, das duas uma: usar a palavra-chave global ou o array superglobal $GLOBALS, apontando para essa variável, que, se você estiver usando muitas variáveis globais (o que necessitaria uma revisão de conceitos), deve ter um nome bem específico, a fim de não haver conflitos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce ta trabalhando com class achei que era estruturado =X

 

esquece aquilo que te mostrei =X

A certa é utilizar-se de um Singleton Registry.

Essa e a ideai..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não acho minha estrutura confusa, você diz isso pelo fato de a index possuir vários requires?

 

Não acho minha estrutura confusa, você diz isso pelo fato de a index possuir vários requires?

sim, se tem uma funcao pra auto carregamento nao tem pq usar require, eh falta de estrutura e planejamento...

 

 

ourta coisa, nao existe singeton registry, ou eh singleton ou registry, ambas sao coisas parecidas, mas tem diferencas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

no lugar dos includes e melhor usar set_include_path();

 

suponhamos que seus arquivos estejam 'libs/mvc/..';

//roda dentro da pasta lib autoload.php
set_include_path( 
       implode( PATH_SEPARATOR , array_merge(
	array( dirname( __FILE__ ) ),
	explode( PATH_SEPARATOR , get_include_path() )
) ) );

function __autoload($files) {

   $sPatchModel = PAMPA_MVC_VIEW . $files. 'Model.php';
   if (file_exists($sPatchModel)) {
     require_once($sPatchModel);
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ourta coisa, nao existe singeton registry, ou eh singleton ou registry, ambas sao coisas parecidas, mas tem diferencas...

Certo, Singleton Registry não existe, foi apenas uma forma simples de detalhar a implementação que ele possa vir a procurar, afinal é possível, embora não muito prático ou elegante, um Registry SEM Singleton.

 

Mas em que planeta Singleton e Registry são coisas parecidas? Um perpetua a mesma instância de um objeto ao longo do fluxo da aplicação, o outro apenas guarda a instância.

 

Tem um Canyon de diferença entre perpetuar e guardar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, Singleton Registry não existe, foi apenas uma forma simples de detalhar a implementação que ele possa vir a procurar, afinal é possível, embora não muito prático ou elegante, um Registry SEM Singleton.

 

Mas em que planeta Singleton e Registry são coisas parecidas? Um perpetua a mesma instância de um objeto ao longo do fluxo da aplicação, o outro apenas guarda a instância.

 

Tem um Canyon de diferença entre perpetuar e guardar.

@bruno

sim, pode-se dizer q o registry eh um singeton melhorado, isso o permite guardar instancias...

 

 

@luiz paulo, sua implementacao ficou otima,melhor, mas ainda pode-se dar uma boa enxugada...ainda mais em se tratando de oo...

 

sim, pode-se dizer q o registry eh um singeton melhorado, isso o permite guardar instancias...

Por isso Singleton Registry wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso Singleton Registry wink.gif

nao entendi, primeiro você disse q nao existe, depois disse q existe, como assim?

 

-------------

 

Posso estar equivocado, mas não existe, e sim co-existe.

 

São dois padrões reais e existentes co-existindo numa mesma classe, "lado a lado".

 

Um é uma coisa e o outro é outra, mas juntos fazem aquilo que se espera. Por isso a definição Singleto Registry.

 

Não significa que o Singleton é Registry ou vice-versa ou que um completa o outro o que um é evolução do outro. É uma coisa só, completa por si só, construída a partir de duas idealizações.

 

Tem um nome a título descritivo, mas não é um padrão propriamente dito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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