Criando um objeto

<< Click to Display Table of Contents >>

Navigation:  Session >

Criando um objeto

Previous pageReturn to chapter overviewNext page

 

Principal.php

 

require __DIR__ . '/classes/autoload.php';
require __DIR__ . '/classes/Config.php';
 
echo SESSAO_CAMINHO;
 
// cria a sessao
$session = new classes\Sessao();
 
// grava usuario 
$session->set("usuario"1);
 
// se existe
if ($session->existe("usuario")) {
    echo "<p>usuario: " . $session->usuario . "</p><br/>";
else {
    echo "<p>usuario: não existe</p><br/>";
}
 
// mata o usuario
$session->unset("usuario");
 
if ($session->existe("usuario")) {
    echo "<p>usuario: " . $session->usuario . "</p><br/>";
else {
    echo "<p>usuario: não existe</p><br/>";
}
 
var_dump(
        $_SESSION,
        $session->asObj(),
);
 

// ----- obtendo um valor apenas uma vez
 
// se o getOnce retornar diferente de null o if é verdadeiro e já seta o valor de $valor
if ($valor = $session->getOnce("nome")) {
    echo "<br/>Valor Obtido:";
    echo $valor;
    echo "<br/>";
else {
    echo "vazio<br/>";
}
 
//$session->set("nome", "Junior");
 
var_dump($_SESSION);

 
$session->finalizar();

 

Sessao.php

 

<?php
 
namespace classes;
 
class Sessao {
 
    public function __construct() {
        // ainda não foi startada sessões?
        if (!session_id()) {

            // melhor deixar o caminho em comentario
            // session_save_path(SESSAO_CAMINHO);

            session_start();
        }
    }
 
    public function __get($chave) {
 
        // vazio returna null
        if (!empty($_SESSION[$chave])) {
            return $_SESSION[$chave];
        }
 
        return null;
    }
 
    public function __isset($chave): bool {
        $this->existe($chave);
    }
 
    /**
     * retorna a sessão como objeto
     * @return object|null
     */
    public function asObj(): ?object {
        return (object$_SESSION;
    }
 
    /**
     * seta um valor na sessao e retorna ela mesma
     * @param string $chave
     * @param type $valor
     * @return \classes\Sessao
     */
    public function set(string $chave$valor): Sessao {
 
        // se o $valor for array, converte para objeto
        $_SESSION[$chave] = (is_array($valor) ? (object$valor : $valor);
 
        return $this;
    }
 
    /**
     * Limpa um valor da sessao
     * @param type $chave
     * @return \classes\Sessao
     */
    public function unset($chave): Sessao {
        unset($_SESSION[$chave]);
        return $this;
    }
 
    /**
     * Retorna verdadeiro se o variavel existe na sessao atual
     * @param type $chave
     * @return bool
     */
    public function existe($chave): bool {
        return isset($_SESSION[$chave]);
    }
 
    /**
     * Apaga o arquivo velho e cria uma nova (segurança)
     * @return \classes\Sessao
     */
    public function regenerar(): Sessao {
        session_regenerate_id(true);
        return $this;
    }
 
    /**
     * Finaliza todas as variaveis da sessao
     * @return \classes\Sessao
     */
    public function finalizar(): Sessao {
        session_destroy();
        return $this;
    }
 
    /**
     * Obtem um valor e mata ele. Uso unico.
     * Utilitario: coloque dentro dele uma informação que seja necessário no redirect
     * da pagina, depois de pegar ele, limpa a mensagem para não usar novamente.
     * Tipo uma mensagem de erro
     */
    public function getOnce($chave) {
        // se existe a chave
        if ($this->existe($chave)) {
            // pega o valor dela
            $local = $_SESSION[$chave];
            // limpa o conteudo
            $this->unset($chave);
            // retorna o valor
            return $local;
        }
        return null;
    }
 
}