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 daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

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