Tipagem dinâmica significa que os tipos das variáveis são associadas à valores, e não à variáveis. Ou seja, o tipo de uma variável é inferido em tempo de execução, o que permite que ela seja variada no decorrer do código.
<?php
$foo = 'bar'; // tipo `string`
$foo = 123; // agora é do tipo `integer`
$foo = 1.3; // agore é do tipo `double`
?>
A principal diferença entre as duas linguagens é que, como o PHP é open source, a comunidade da Internet é a proprietária. Assim, as alterações na linguagem podem ser feitas de acordo com as necessidades da comunidade, não de um desenvolvedor específico. Enquanto a engine do JS é desenvolvida individualmente por cada navegador.
O PHP (Hypertext Preprocessor) é uma linguagem de script para propósitos gerais deve ser utilizada no lado servidor (onde a página web está armazenada), ou seja, o usuário final não consegue acessar os códigos desenvolvidos. Enquanto a linguagem JavaScript geralmente é executada pelo navegador, o que a torna visível e manipulável pelo usuário. O servidor executará toda a lógica da aplicação, com os processamentos e acessos a base dados pelo PHP, e enviará o resultado para o navegador. A regra geral é usar scripts do lado cliente para lidar com a interface e para pequenos processamentos.
Variáveis superglobais são variáveis globais nativas da linguagem PHP, i.e., estão disponíveis em todos os escopos de qualquer script, que armazenam informações de ambiente. Não há necessidade de usar a keyword global
para acessá-las. Exemplos:
$_COOKIE // array associativo de valores passados para o script corrente como cookies HTTP
$GLOBALS // array associativo de referências para todas as variáveis definidas com escopo global
$_GET // permite a leitura de variáveis passadas na URL através de um formulário HTML usando o método GET
O atributo method
da tag form
informa ao browser como os dados preenchidos no formulário serão enviados para o web server. Cada método exigirá uma forma diferente de processar os dados do formulário no lado servidor.
-
O método padrão
GET
, fará com que os dados sejam enviados no final da URL corrente, como query string (conjunto de variáveis no formatochave=valor
, separados por "&"). Geralmente usados em formulários simples onde não há preocupação com a segurança das informações. Além de ser uma alternativa para o uso de cookies quando estes estão desativados no navegador. OBS: Uma URL permite até 2048 (2¹¹) caracteres; pode enviar penas dados codificados em ASCII. -
Enquanto ao usar o método
POST
, o navegador indica que as informações enviadas devem ser processadas. Necessário quando será adicionado algum dado ao banco de dados, ou quando as informações são sensíveis. Em termos práticos, os dados serão enviados no corpo da requisição (request body).
O modelo de três camadas (3-Tier) é um sistema cliente-servidor com 3 partes bem definidas, onde a camada de negócio é retirada do lado cliente:
- camada cliente/apresentação: é a interface com o usuário final, normalmente o navegador web;
- camada de processamento/negócio (ou camada intermediária): responsável por receber e processar as requisições dos usuários;
- camada de (banco de) dados: contém os dados necessários para atender as requisições.
O protocolo HTTP não mantém uma conexão porque cada pedido que o navegador realiza ao servidor é naturalmente independente de qualquer outro pedido. Assim, a lógica para simular tal conexão deve ser realizada pela aplicação no lado servidor. Os cookies e as sessões ajudam a compor essa lógica, ao guardar informações do usuário durante a troca de requisições. Os cookies guardam no cliente, enquanto as sessões guardam no servidor web.
Os cookies são variáveis enviadas pelo servidor através das solicitações dos clientes; uma simples string com um formato definido. Os valores dessas variáveis ficam armazenadas no computador do usuário por um período de tempo, e são enviados em futuros pedidos do navegador para o servidor, como forma de identificar cada cliente no servidor. Um navegador pode guardar até 50 cookies enviados de um determinado domínio. E cada uma não pode ter mais do que 4KB. Os usuários podem desativar o uso de cookies em seus navegadores.
Já as sessions são informações do lado servidor que tende a existir somente enquanto o usuário visita página. Apenas um identificador único é armazenado no lado cliente. Esse session id é passado para o servidor web quando o navegador do visitante solicita seu endereço HTTP, permitindo o acesso (no servidor) às variáveis associadas à sessão. Por padrão, esse token de 32 dígitos gerado no servidor é enviado como um cookie a ser definido no navegador, com o nome de PHPSESSID
.
As sessões são geralmente usadas quando não é necessário manter algum dado permanentemente. São mais fáceis de usar, e podem ser tão grandes quanto o necessário.
código da questão:
<?php
if(isset($_COOKIE["count"])) {
$count = $_COOKIE["count"];
$count++;
setcookie("count", $count, time() + 600);
} else {
$count = 0;
setcookie("count", $count, time() + 600);
// ^^^ 600 segundos
}
?>
<html>
<head>
<title>Uso de Cookies</title>
</head>
<body>
<h1><?php echo $count; ?></h1>
</body>
</html>
Assumindo que os cookies estão permitidos no browser, no primeiro acesso, o cookie count
não estará definido, então, entrará no else
. Assim, o resultado do body será <h1>0</h1>
. No segundo acesso, o resultado do body será <h1>1</h1>
. Já no terceiro, será <h1>2</h1>
pois o valor do count
anterior (1) foi recuperado do cookie definido, e incrementado em 1.
<?php
$dbname = 'skifree';
$usuario = 'fabio';
$senha = '#Fa4621#';
$id_curso = 1;
try {
$conn = new PDO("mysql:host=localhost;dbname=" . $dbname, $usuario, $senha);
$conn->exec("SET NAMES UTF8");
$stmt = $conn->prepare("SELECT * FROM `user` WHERE `id_curso` = " . $id_curso);
$stmt->execute();
/* imprimir apenas o `username` */
while ($row = $stmt->fetch()) echo $row['username'] . "<br>";
//foreach ($stmt->fetchAll() as $k => $v ) echo $v['username'] . "<br>";
} catch (PDOException $e) {
echo $e->getMessage();
}
Namespaces são delimitadores abstratos (ou container) que fornecem um contexto para um conjunto de itens -- no caso do PHP, o nome de uma classe ou função. São usados para evitar colisões entre nomes de classes definidas ou importadas por outras bibliotecas, i.e., uma desambiguação para itens com mesmo nome. No PHP, para criar um namespace, basta inserir a palavra reservada namespace
seguida do nome dela como primeira instrução do código.
Vantagens de usar um framework em relação à abordagem tradicional:
- reuso mais fácil, possivelmente mais seguro e manutenível de código;
- desenvolvimento mais ágil e orientado aos padrões bem definidos do framework;
- proporciona um início consistente e rápido para o desenvolvimento de um sistema completo.
O MVC é um padrão de arquitetura de software (design pattern) que estabelece uma divisão do projeto em 3 camadas: o modelo (model), a visão (view) e o controlador (controller). A fim de isolar a lógica de negócio da interface gráfica com o usuário. Deixando o código melhor estruturado, otimizado e legível. Além de permitir alterações nas regras de negócios sem afetar a interface gráfica, ou alterar a interface gráfica sem precisar atualizar o modelo de dados utilizado.
- Model: define a representação de uma abstração na forma de dados. Representa os dados da aplicação e as regras de negócios usadas para manipulá-los.
- View: representação visual de um modelo. Corresponde aos elementos que compõem a interface do usuário, tais como formulários e botões.
- Controller: gerencia os detalhes da comunicação entre model e view, servindo como um mediador. Manipula as interações dos usuários na interface gráfica e as canaliza para a camada model. Controla o fluxo de dados no modelo e atualiza a interface gráfica sempre que há alterações nos dados.
O padrão de projetos front controller ajuda a gerenciar as rotas dos controllers de aplicações web. Se baseia em centralizar um controlador que lidará com todas as requisições de acesso ao ambiente, o único arquivo (chamado de Bootstrap) responsável pelas chamadas (instanciando) dos controllers.
No caso do framework Yii 2, os controladores são organizados em actions, sendo que cada uma é responsável por carregar uma página do site. As requisições são realizadas para o arquivo index.php
onde uma variável de rota r
é adicionada na URL para indicar qual o controlador e a action (dele) processará a requisição do usuário: index.php?r=ControllerID/ActionID
. Se a action não for informada, a padrão (index) será carregada. Se o controlador não for informado então o padrão (site
) será executado.
Widgets são blocos de códigos reusáveis que são utilizados nas views para a criação de elementos mais complexos da interface gráfica, como tabelas e painéis. Já os Helpers são um conjunto de classes utilitárias (com métodos estáticos) que ajudam a realizar tarefas comuns do desenvolvimento, como manipulação de strings e arrays, geração de formulários, inserção de links e imagens, etc.
O Object Relational Mapping (ORM) é uma técnica para a conversão de dados entre sistemas de tipos incompatíveis usando a Programação Orientada à Objetos. O que torna o código padronizado e de fácil manutenção.
Por exemplo, no framework Yii, a classe ActiveRecord
é um ORM usado para converter/mapear registros de um banco de dados (modelo relacional) em objetos (modelo orientado à objetos).
Gostei dessa eager 🥇