Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

FULL STACK

FULL STACK

{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev",
"authors": [
{
"name": "Robson V. Leite",


PHP standard
"email": "cursos@upinside.com.br"

<?=
"homepage": "https://upinside.com.br",
"role": "Developer"
}

recomendation
],
"config": {

;?> },
"vendor-lib": "vendor"

"autoload": {
"psr-4": {
"Source\\": "source/"
}
}
}

————— FORMAÇÃO FULL STACK PHP DEVELOPER —————

Robson V. Leite
CEO UpInside Treinamentos
cursos@upinside.com.br
www.upinside.com.br www.upinside.com.br
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-1: Padrão básico de codificação:


{

O que deve ser considerado como codificação padrão para garantir um alto nível de
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev",
"authors": [
{
interoperabilidade técnica entre códigos compartilhados.
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
"homepage": "https://upinside.com.br",

/Tags: /Efeitos colaterais (side effects):


"role": "Developer"
}
],
"config": {
"vendor-lib": "vendor" Use as tags <?php ;?> para abertura e Você pode (incluir um arquivo, conectar
},
"autoload": { fechamento e <?= ;?> para saída. Nunca a um serviço, gerar uma saída) OU
"psr-4": {
"Source\\": "source/" use outras variações (ex: <%, %>, <%=) (declarar uma classe, criar uma função,
}
} definir uma constante). Mas nunca faça
}
ambos no mesmo arquivo.
file.php

file.php
<?php
echo "Olá mundo!";
?> <?php

Robson V. Leite <h1><?= "Olá mundo!"; ?></h1> require "config.php"; /Arquivo com constantes
CEO UpInside Treinamentos require "functions.php"; //Arquivo de funções
cursos@upinside.com.br
www.upinside.com.br echo HELLO;
useMyFunction();
/Codificação de caracteres:
DEFINE("HELLO", "Olá mundo!");
Arquivos devem usar apenas UTF-8 sem BOM
para código PHP. (IDE, Charset, Etc.) mySecondeFunction()
{
<?= "page X"; ?>
//Function Body
}
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-1: Padrão básico de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev",
/Classes PHP:
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br" Cada classe deve estar em seu próprio MyClass.php
"homepage": "https://upinside.com.br",

}
"role": "Developer"
arquivo e ter pelo menos um nível de
],
"config": {
namespace (padrão PSR-4). O nome da <?php
},
"vendor-lib": "vendor"
classe deve ser declarada em StudlyCaps.
"autoload": { namespace Source;
"psr-4": {

}
"Source\\": "source/"
/Constantes da classe devem ser class MyClass
}
declaradas em maiúscula e quando preciso {
}
const COURSE = "FSPHP";
podem ser separadas por under_score. Const CLASS_NAME = "PSR-1";

public $ModuleName; //APENAS $StudlyCaps


/Propriedades da classe podem ser public $className; //OU APENAS $camelCase
escritas em $StudlyCaps, $camelCase ou public $class_time; //OU APENAS $under_score

$under_score, não existe uma public function getClassName()


Robson V. Leite recomendação rígida para elas, mas é {
return $this->className;
CEO UpInside Treinamentos
cursos@upinside.com.br
sempre importante escolher uma e usar }
www.upinside.com.br sempre a mesma. Se for $camelCase, use
public function getClassTime()
sempre $camelCase e nunca as outras.
{
//Erro pois já usamos $camelCase acima.
return $this->class_time;
/Métodos da classe devem ser declarados
}
sempre em camelCase() }
<?= "page X"; ?>
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP", A intenção da PSR-2 é reduzir o atrito cognitivo ao escanear códigos de diferentes autores. Ele faz isso
"minimum-stability": "dev",
"authors": [ enumerando um conjunto compartilhado de regras e expectativas sobre como formatar o código PHP.
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
"homepage": "https://upinside.com.br",
"role": "Developer"
/Geral:
}
],
"config": { /Padrão básico de codificação: O código /Legibilidade: Pode adicionar linhas em
},
"vendor-lib": "vendor"
deve seguir todas as recomendações branco para separar blocos de código.
"autoload": {
"psr-4": { listadas na PSR-1.
/Recuo: Use 4 espaços para indentar
"Source\\": "source/"
} IDE
}
} /Arquivos: Sempre devem terminar com seu código, nunca o TAB.
uma linha em branco (Unix linefeed).
IDE /Declaração: Não deve ter mais de uma
/Somente PHP: Um arquivo somente com PHP por linha de código.
deve omitir a tag ?> de fechamento.
/true, false, null: São palavras-chave e
Robson V. Leite
IDE /Linhas: Procure manter suas linhas constantes do PHP, devem ser escritas
CEO UpInside Treinamentos
cursos@upinside.com.br com no máximo 80 caracteres, quando sempre em letra minúscula.
www.upinside.com.br
necessário você poderá usar até 120.

IDE A IDE é sua ferramenta de programação,


IDE /Espaços finais: Certifique-se que o PHPStorm, netBeans entre outras. Elas já
último caractere da linha não é um implementam as PSR`s ou tem recursos para
<?= "page X"; ?> espaço em branco. automatizar essa implementação.
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /Namespaces e a declaração use: /Classes, propriedades e métodos:
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
/Namespaces: Após declarar um, sempre Entenda classes como todas as classes, interfaces e traits.
"homepage": "https://upinside.com.br",
"role": "Developer" deixe uma linha em branco para então
],
}
continuar seu código. /extends e implements devem SEMPRE ser
"config": {
"vendor-lib": "vendor" declarados na mesma linha do nome da
},
"autoload": { /use: Quando presentes devem ser classe, se ambos, primeiro o extends.
"psr-4": {
"Source\\": "source/" declarados após os namespaces.
} IDE A chave de abertura da classe deve seguir
}
} DEVE haver um use por declaração. na próxima linha após o nome e a chave de
fechamento deve seguir na próxima linha
DEVE haver um espaço após o bloco após o corpo.
de declaração do use.
MyClass.php
MyClass.php
Robson V. Leite
<?php
CEO UpInside Treinamentos
cursos@upinside.com.br <?php
namespace Source\Controller;
www.upinside.com.br
namespace Source\Controller;
use Source\Parent\ParentClass
use Source\Model\MyClass, Source\Conection\MyClass use Source\Parent\iClass
use Source\Model\MyClass;
use Source\Conection\MyClass; class MyClass extends ParentClass implements iClass
{
<?= "page X"; ?> class MyClass //Class Body
{ }
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /Classes, propriedades e métodos:
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br" /em uma lista de implements você pode /Propriedades devem sempre declarar a
"homepage": "https://upinside.com.br",

}
"role": "Developer"
declarar todas as interfaces em uma visibilidade (public, protected,
],
"config": {
linha ou declarar uma por linha. private) e nunca deve usar em sua
},
"vendor-lib": "vendor"
declaração a palavra-chave var.
"autoload": {
IDE Em uma por linha, cada linha subsequente
"psr-4": {
"Source\\": "source/"
deve ser recuada uma vez e o primeiro item Não deve haver mais de uma propriedade
} deve estar na próxima linha e deve haver declarada por linha e nunca use underscore_
}
} apenas uma interface por linha. ou _underscore para declarar visibilidade
protegida ou privada.

MyClass.php
MyClass.php

<?php
<?php
Robson V. Leite
namespace Source\Controller;
CEO UpInside Treinamentos namespace Source\Controller;
cursos@upinside.com.br use Source\Parent\iClass
www.upinside.com.br
class Course
class MyClass implements {
iClass, //var $courseName;
\ArrayAccess, //private $courseName_;
\Countable public $courseName;
{ protected $courseAuthor = "Robson V. Leite";
<?= "page X"; ?> //Class Body private $coursePrice;
} }
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /Classes, propriedades e métodos: MyClass.php
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br" /Métodos assim como propriedades devem <?php
"homepage": "https://upinside.com.br",

}
"role": "Developer"
ter sua visibilidade declarada e não
namespace Source\Controller;
],
"config": {
usar underscore_ ou _underscore.
"vendor-lib": "vendor" class Course
},
{
"autoload": {
"psr-4": {
Nomes de métodos não podem conter espaços private $courseName;
"Source\\": "source/" nele ou após ele. A chave de abertura deve private $courseAuthor;
}
} estar na sua própria linha, a de fechamento private $coursePrice;
}
na próxima linha após o corpo e devem ser
public function setName($name)
declarados com $camelCase(). {
$this->courseName = $name;
}
/Argumentos do método: Na lista de
argumentos deve haver um espaço depois da public function setMore($course, $price = "997")
vírgula mas não antes, argumentos com {
Robson V. Leite valores padrão devem ir ao final da lista. //Method Body
}
CEO UpInside Treinamentos
cursos@upinside.com.br
www.upinside.com.br A lista de argumentos também podem ser public function setAll(
declaradas na próxima linha. Quando $course,
$author,
isso ocorrer cada argumento assim como
$price = "997"
os parênteses devem estar em uma linha )
IDE subsequente e você deve adicionar um {
recuo para todos. //Method Body
<?= "page X"; ?> }
}
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /abstract, final e static:
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
/abstract e final quando presentes devem /chamada de métodos funções: Chamadas de
ser declaradas ANTES da declaração de métodos e funções não use espaços entre
"homepage": "https://upinside.com.br",
"role": "Developer"
}
], visibilidade. o nome declarado e os parênteses de
"config": {
"vendor-lib": "vendor"
Quando presente, a static deve ser abertura e fechamento.
},
"autoload": {
declarada DEPOIS da declaração de
"psr-4": { Na lista de argumentos deve haver um espaço
"Source\\": "source/"
visibilidade.
} depois da vírgula mas não antes.
}
}
MyClass.php A lista de argumentos também pode ser
dividida em várias linhas.
<?php

namespace Source\Controller; file.php

abstratic class Course


Robson V. Leite <?php
{
CEO UpInside Treinamentos private static $courseName;
myFunction();
cursos@upinside.com.br
www.upinside.com.br myFunction($arg, $argB);
abstratic public function getCourse()
{
$course->getCourse();
//Method Body
$course->setPrice("997");
}
$course->setAll(
final public function getPrice()
"FS PHP",
<?= "page X"; ?> {
"Robson V. Leite"
//Method Body
);
}
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /Regras gerais da PSR para
"authors": [
{
"name": "Robson V. Leite",

estruturas de controle:
"email": "cursos@upinside.com.br"
"homepage": "https://upinside.com.br", file.php
DEVE haver um espaço após a palavra-
"role": "Developer"
}
],
"config": { chave da estrutura de controle.
"vendor-lib": "vendor" <?php
},
"autoload": {
"psr-4": { NÃO DEVE haver um espaço após o if ($arg) {
"Source\\": "source/" // if body
} parêntese de abertura nem antes do } elseif ($argB) {
}
} parêntese de fechamento. // elseif body
} else {
// else body;
DEVE haver um espaço entre o parêntese }

de abertura e a chave de abertura. switch ($argTest) {


case 0:
//First Case
O corpo da estrutura de controle DEVE break;
Robson V. Leite
ser recuado uma vez. default:
CEO UpInside Treinamentos //No tested In Case
cursos@upinside.com.br
break;
www.upinside.com.br
A chave de fechamento DEVE estar na }
próxima linha após o corpo da estrutura. try {
// try body
} catch (ClassExceptionType $e) {
O corpo de qualquer estrutura DEVE estar // catch body
<?= "page X"; ?> entre chaves. }
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-2: Guia de estilo de codificação:


{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", /Closures:
"authors": [
{
file.php
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br" DEVEM ser declaradas com um espaço
"homepage": "https://upinside.com.br",

}
"role": "Developer"
depois de function e um espaço antes e <?php
],
"config": {
depois de use.
"vendor-lib": "vendor" $myClosure = function($argA, $argB) {
}, //Closure Body
"autoload": {
"psr-4": { A chave de abertura DEVE ir na mesma };

}
"Source\\": "source/"
linha do nome, a chave de fechamento $myClosureB = function($argA) use ($varA) {
}
}
DEVE ir uma linha após o corpo. //Closure B Body
};

NÃO DEVE haver espaço após o parêntese $myLongClosureArgs = function(


de abertura ou antes do parêntese de $argA,
$argB,
fechamento na lista de argumentos ou $argC
variáveis. ) {
Robson V. Leite //Closure B Body
};
CEO UpInside Treinamentos
cursos@upinside.com.br DEVE haver na lista de argumentos ou
$myLongClosureArgsB = function(
www.upinside.com.br
variáveis um espaço depois da vírgula $argA,
mas nunca antes. $argB
) use(
$varA,
Argumentos com valor padrão DEVEM ir ao $varB
) {
<?= "page X"; ?> final da lista de argumentos. //Closure B Body
};
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

PSR-4: Carregamento automático:


{

Este PSR descreve uma especificação para o carregamento automático e interoperável


"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev",
"authors": [ das classes, assim como mostra onde colocar os arquivos em seu projeto.
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
"homepage": "https://upinside.com.br",

}
"role": "Developer"
/Especificação:
],
"config": {
"vendor-lib": "vendor"
Entenda classes como todas as classes, interfaces e traits.
},
"autoload": {
"psr-4": { 1) Um nome de classe totalmente qualificado deve seguir 3) Ao carregar um arquivo que corresponde
o seguinte formato:

"Source\\": "source/"
} a um namespace:
}
}


 \<VendorNamespace>(\<SubNamespace>)*\<ClassName> 1) O Vendor namespace e alguns dos
primeiros níveis de sub-namespace
1) O namespace completo DEVE ter um nome de nível DEVEM corresponder a um diretório
superior (Vendor). base.

2) O namespace PODE ter um ou mais sub-namespaces. 2) Cada sub-namespace seguinte deve


corresponder a um sub-diretório
Robson V. Leite 3) O namespace DEVE terminar com o nome da classe. dentro do diretório base, cada
CEO UpInside Treinamentos
4) Underscore não tem qualquer efeito especial no separador de sub-namespace
cursos@upinside.com.br
www.upinside.com.br namespace. corresponde a um separador de
diretório no sistema operacional.
5) Caracteres alfabéticos PODEM ter qualquer
combinação de minúsculas e maiúsculas. 4) Implementações de autoloader NÃO DEVEM
lançar exceções, gerar erros de
6) Todos os namespaces DEVEM ser referenciados de
qualquer nível ou retornar um valor.
<?= "page X"; ?> forma única.
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

Um exemplo de autoload:
{
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev", autoload.php
"authors": [
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"
"homepage": "https://upinside.com.br", <?php
"role": "Developer"
}
],
"config": { autoload_register(function ($class) {
"vendor-lib": "vendor"
},
"autoload": { //Define o Vendor Namespace e a pasta raiz.

"psr-4": {
"Source\\": "source/" $prefix = 'Source\\';;

}
} $baseDir = __DIR__ . '/source/';
}

//Verifica o namespace vendor na classe



$len = strlen($prefix);

if (strncmp($prefix, $class, $len) !== 0) {

return;

}
Robson V. Leite
//Obtém o nome da classe e substitui o namespace por diretório.

CEO UpInside Treinamentos
cursos@upinside.com.br
$relativeClass = substr($class, $len);

www.upinside.com.br $file = $baseDir . str_replace('\\', '/', $relativeClass) . '.php';

//Carrega o arquivo de classe se ele existir.



if (file_exists($file)) {

require $file;

<?= "page X"; ?> }
});
DEFINE("CLASSNAME", "PHP standard recomendation");

FULL STACK

Autoload PSR-4 com Composer:


{

Uma forma mais prática, inteligente e interoperável de criar seu autoload usando o
"name": “UpInside/fsphp",
"description": "Formação FS PHP",
"minimum-stability": "dev",
"authors": [ Composer para gerenciar todas as dependências do projeto:
{
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br"

O exemplo ao lado mostra o arquivo de configuração


"homepage": "https://upinside.com.br",
"role": "Developer"
} composer.json
], composer.json do Composer.
"config": {
"vendor-lib": "vendor"
{
}, Com ele o gerenciador de dependências PHP poderá
"autoload": { "name": “UpInside/fsphp”,
"psr-4": { automatizar todo o processo de carregamento de classes
"Source\\": "source/" "description": "Formação FS PHP",
}
"minimum-stability": "dev", e componentes para você.
}
} "authors": [
{ A configuração autoload:
"name": "Robson V. Leite",

"email": "cursos@upinside.com.br" "autoload": {
"homepage": "https://upinside.com.br", "psr-4": {
"role": "Developer" "Source\\": "source/"
} }
Robson V. Leite ], }
CEO UpInside Treinamentos "config": {
cursos@upinside.com.br "vendor-lib": "vendor" Neste ponto estamos informando que nossas classes
www.upinside.com.br
}, estão no namespace fornecedor Source, e dentro da
"autoload": { pasta raiz source do projeto.
"psr-4": {
"Source\\": "source/" Depois de rodar o Composer, basta invocar o autoload:
}
<?= "page X"; ?> } require __DIR__."/vendor/autoload.php";
}

You might also like