Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
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 =(
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.
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..
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...
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);
}
}>
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.
Este post vai te ajudar :seta: http://forum.imasters.com.br/topic/401441-organizar-codigo/page__view__findpost__p__1572696
:thumbsup:
>
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.
@brunosim, 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 /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/wink.gif&key=0566fd943552bcff9cb1b879403ca34b5ff8f67befaac7fe4648006e9f764689" alt="wink.gif" />
Por isso Singleton Registry /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/wink.gif&key=0566fd943552bcff9cb1b879403ca34b5ff8f67befaac7fe4648006e9f764689" alt="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.
prq nao usa so o include =X
nao intendio porq da global;
conn.php
$conn = new PDO(/______/);
index.php