Ir para conteúdo

POWERED BY:

Arquivado

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

silviofs

erro singleton

Recommended Posts

Estou tentando abrir o banco de dados (ieducar) gratuito oferecido pelo Software publico brasileiro. Uso windows 7. O projeto necessita do easyphp 2.0b1(apache e Mysql), postgresql 8.2, usando o postgresql, criei o usuario(user) e proprietario do banco de dados(db), ao criar o sql e importar tudo correto. Mais ao entrar em localhost dá o seguinte erro:


Parse error: parse error, unexpected $end, expecting T_FUNCTION in C:\Program Files\EasyPHP 2.0b1\www\lib\CoreExt\Singleton.php on line 100

 

Isso depois de modificar as chaves. O script completo e esse:

<?php
/**
 * i-Educar - Sistema de gestão escolar
 *
 * Copyright (C) 2006  Prefeitura Municipal de Itajaí
 *                     <ctima@itajai.sc.gov.br>
 *
 * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
 * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
 * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
 * qualquer versão posterior.
 *
 * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
 * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
 * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
 * do GNU para mais detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
 * com este programa; se não, escreva para a Free Software Foundation, Inc., no
 * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
 *
 * @author    Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
 * @category  i-Educar
 * @license   @@license@@
 * @package   CoreExt_Singleton
 * @since     Arquivo disponível desde a versão 1.1.0
 * @version   $Id$
 */
/**
 * CoreExt_Singleton abstract class.
 *
 * Funciona como uma interface de atalho para minimizar a duplicação de código
 * para criar instâncias singleton. Internamente, entretanto, funciona como um
 * {@link http://martinfowler.com/eaaCatalog/registry.html Registry} já que
 * todas as suas subclasses estarão armazenadas em um array estático desta
 * classe.
 *
 * @author    Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
 * @category  i-Educar
 * @license   @@license@@
 * @link      http://martinfowler.com/eaaCatalog/registry.html Registry pattern
 * @package   CoreExt_Singleton
 * @since     Classe disponível desde a versão 1.1.0
 * @version   @@package_version@@
 */
abstract class CoreExt_Singleton
{
  /**
   * A instância singleton de CoreExt_Singleton
   * @var array
   */
  private static $_instance = array();
  /**
   * Construtor.
   */
  private function __construct()
  {
  }
  /**
   * Sobrescreva esse método para garantir que a subclasse possa criar um
   * singleton. Esta deve fazer uma chamada ao método _getInstance, passando
   * uma string que tenha como valor o nome da classe. Uma forma conveniente
   * de fazer isso é chamando _getInstance passando como parâmetro a constante
   * mágica __CLASS__.
   *
   * Exemplo:
   * <code>
   * <?php
   * ... // extends CoreExt_Singleton
   * public static function getInstance()
   * {
   *   return self::_getInstance(__CLASS__);
   * }
   * </code>
   *
   * @return CoreExt_Singleton
   */
  public static function getInstance()
  {
    require_once 'CoreExt/Exception.php';
    throw new CoreExt_Exception('É necessário sobrescrever o método "getInstance()" de CoreExt_Singleton.');
  }
  /**
   * Retorna uma instância singleton, instanciando-a quando necessário.
   *
   * @param  string $self  Nome da subclasse de CoreExt_Singleton que será instanciada
   * @return CoreExt_Singleton
   */
  public static function _getInstance($self){
    if (!isset(self::$_instance[$self]))
      self::$_instance[$self] = new $self();
      {
     return self::$_instance[$self];
      }
}

 

As linhas que estão dando erro esta em negrito. O engraçado que testando online o script está perfeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é o fechamento da chaves.

public static function _getInstance($self){
    if (!isset(self::$_instance[$self])) self::$_instance[$self] = new $self();{
		return self::$_instance[$self];
	}
}

 

Isto:

 ;{

não existe haha

 

 

 

Um bloco If normalmente funciona da seguinte forma:

if(CONDICAO){

}

 

O correto não seria dessa forma ???

public static function _getInstance($self){
    if (!isset(self::$_instance[$self])){
		self::$_instance[$self] = new $self();
		return self::$_instance[$self];
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código deveria estar da seguinte forma:

 

public static function _getInstance($self){
    if (!isset(self::$_instance[$self])) {
        self::$_instance[$self] = new $self();
    }

    return self::$_instance[$self];
}

Traduzindo:

 

  1. Se a propriedade de classe self::$_instante[$self] não estiver definida, defina-a;
  2. Retorne a propriedade self::$_instante[$self].

 

:smile:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Somente para complementar a resposta do @João Batista Neto.

Além do apontado por ele, você está com suas chaves desbalanceadas... rs, ou seja, falta também a chave de fechamento da classe. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero agradecer a Gabriel e João fiz o que vocês sugeriram entrei no notepad++ e alterei o script e salvei, mais continua dando erro veja o anexo. Rodrigo por favor diz onde devo fechar as chaves sou iniciante em programação.

localhost.docx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na última linha, @silviofs, coloque mais uma chave de fechamento.

 

    public static function _getInstance($self){
        if (!isset(self::$_instance[$self])) {
            self::$_instance[$self] = new $self();
        }

        return self::$_instance[$self];
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro João coloquei a chaves e o erro piorou veja:

Fatal error: Call to private CoreExt_Singleton::__construct() from context 'CoreExt_Singleton' in C:\Program Files\EasyPHP 2.0b1\www\lib\CoreExt\Singleton.php on line 96

 

linha 96: self::$_instance[$self] = new $self();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que você acha que piorou, @silviofs?

 

Antes você tinha um erro léxico que impedia o parser do PHP fazer o trampo dele. Agora o erro inicial foi resolvido e você não tem mais um erro léxico; o erro agora é de programador.

 

Quer bater um pouquinho a cabeça para descobrir o problema e apender, ou quer que eu te fale qual é o problema e você promete que vai pesquisar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando uma classe abstrata, que não pode ser instanciada por ser abstrata. Para essa classe abstrata ser utilizada, você precisa derivá-la, criando uma classe concreta.

<?php
class SomeSingleton extends CoreExt_Singleton {
    public static function getInstance() {
        return self::_getInstance(__CLASS__);
    }
}

$instance = SomeSingleton::getInstance();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí você vai precisar pesquisar e estudar, velho. Não sei como está seu código todo, nem o que você pretende, para sugerir onde você deve criar um participante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um banco de dados para uma escola, com nome da escola, aluno, turma, notas, etc. O programa teria que subir no navegador via apache, mysql e postgresql a tela inicial e depois era so utilizar. Segui o tutorial

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, silviofs disse:

Se puder me da uma ajuda. Valeu

Então cara, assim como o @João Batista Neto disse, você vai precisar estudar um pouco, como está a teoria de orientação a objetos em sua cabeça? Ela está clara?

Você já consegue dividir as responsabilidades do seu código?

O primeiro passo para desenvolver algo do nível que você quer é justamente entender esses conceitos, pois se não você sempre irá esbarrar em problemas semelhantes.

Você pode começar sua leitura por ai, e ai sim colocar mãos no código.

 

Sugiro também que você dê uma estudada na estrutura básica de uma linguagem de programação, todas elas tem a mesma características, mudando apenas as sintaxes. Eu tenho alguns posts no meu blog pessoal apresentando essas estruturas, se tiver interesse posto o link aqui para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros colegas devido a um pequeno errro eu baixei o  arquivo rar errado. Baixei o certo importar o sql e graças a Deus não existe o arquivo Singleton. Abriu mais deu outro erro.

Notice: Undefined index: itj_controle in C:\Program Files\EasyPHP 2.0b1\www\intranet\include\clsControlador.inc.php on line 58

 

O script e este:

public function clsControlador()
  {
    @session_set_cookie_params(1200);
    @session_start();
    if ('logado' == $_SESSION['itj_controle']) {
      $this->logado = TRUE;
    }
    else {
      $this->logado = FALSE;
    }

Está em negrito. os termos 'logado' e 'itj_controle' estão transparente como se estivesse esperando uma substituição.

A abertura do navegador esta assim. Veja anexo.

Ai quando digito a senha aparece outro erro.

Fatal error: Call to undefined function pg_connect() in C:\Program Files\EasyPHP 2.0b1\www\intranet\include\clsBancoPgSql.inc.php on line 158

Ieducar aberto.docx

Compartilhar este post


Link para o post
Compartilhar em outros sites

script

public function Conecta() {
    // Verifica se o link de conexão está inativo e conecta
    if (0 == $this->bLink_ID) {
      $this->FraseConexao();
      if ($this->bDepurar) {
        printf("<br>Depurar: Frase de Conexão : %s<br>\n", $this->strFraseConexao);
      }
      $this->bLink_ID = pg_connect($this->strFraseConexao);
      if (!$this->bLink_ID) {
        $this->Interrompe("Link inválido, conexão falhou!");
      }
    }
  }

Linha 158 em negrito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala @silviofs, na realidade o erro fala por si próprio, este erro significa que a função pg_connect não existe, o que significa que a extensão responsável por fazer a comunicação entre o PHP e o Postgree está desativada.

 

Verifique o seu php.ini e ative-a.

 

Com relação ao erro do post anterior (Notice), não é um erro, e sim uma notificação, significa que aquele índice do array $_SESSION não existe, isso não influenciaria a execução do seu código, se quiser remover a notificação da tela, você pode desativá-la no php.ini também setando a config:

error_reporting = E_ALL

para

error_reporting = E_ALL & ~E_NOTICE

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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