Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Este é um pequeno artigo que faço com a intenção de ajudar quem está apenas em PHP e deseja aprender Java.
Dicas:
Se não souber os tipos, nunca vai aprender Java, linguagens da Microsoft e outras.
Como aprender tipos em php?
Uma forma de aprender os tipos em PHP é documentar as propriedades das classes e retorno dos métodos:
class ImastersForum
{
/**
* Para dizermos o tipo, escrevemos @var
* @var string
*/
private $php = "";
/**
* Escreva o nome completo e não apenas "int"
* @var integer
*/
private $java = 1;
/**
* Em Java isto é double, em PHP é float, ambos existem nas duas linguagens
* @var float
*/
private $css = 3.1;
/**
* Em PHP, false pode ser 0, string vazia "", null, e array vazio
* Em PHP true pode ser 1, string "...", array(1)
* Em Java é apenas true e false
* @var boolean
*/
private $asp = false;
/*
* Documentando o retorno de métodos, para isso, usamos @return
* @return string
*/
public function php()
{
return $this->php;
}
/*
* @return integer
*/
public function java()
{
return $this->java;
}
/*
* @return float
*/
public function css()
{
return $this->css;
}
/*
* @return boolean
*/
public function asp()
{
return $this->asp;
}
}
Como aprender namespaces em php?
Imagine o fórum aqui pela URL forum.imasters.com.br, criaremos duas pastas, db e utils em "imasters/forum/i18n" e em "imasters/forum/utils".
Agora vamos criar duas classes, uma para "i18n" e outra para "utils" e utilizaremos namespaces:
imasters/forum/i18n
/**
* Criamos o namespace, deve vir antes de tudo
* Igual ao caminho das pastas, mas com barra invertida
*
* Em Java, seria "package" e com .(ponto) ao invés da barra, exemplo, br.com.imasters.forum
*
*/
namespace imasters\forum\i18n;
class Utf8
{
}
imasters/forum/utils
namespace imasters\forum\utils;
/**
* Aprendendo sobre "use"
* Quando precisar de uma classe que não está no mesmo local do namespace, escreva "use"
* Em Java seria "import"
*
*/
use Countable;
class ArrayCount implements Countable
{
}
Instanciando essas classes
"No início o objeto era sem forma e vazio, o programador então disse "NEW", e criou-se um objeto, e ele viu que era bom"
use imasters\forum\i18n\Utf8; // O nome da classe na frente do "namespace"
use imasters\forum\utils\ArrayCount;
/**
* Em Java seria algo como: br.com.imasters.forum.i18n.Utf8
*/
$utf8 = new Utf8();
$arrayCount = new ArrayCount();
Como fazer para nunca precisar de include e require para suas classes
Para isso criamos uma outra "classe" para servir de "auto loader", precisará de um único include dessa "loader" uma única vez apenas na index.php do seu site.
Criando uma classe Loader:
Antes na index.php vamos definir o caminho da pasta root.
index.php
// Isto pode ser colocado em um arquivo separado e incluído em index.php
define('ROOT_PATH', str_replace("\\", "/", dirname(__FILE__)) . '/');
Loader.php
class Loader
{
public function load($class)
{
/**
* Substituímos a barra (\) do namespace pelo separador do sistema (/)
*/
$filePath = ROOT_PATH . str_replace("\\", '/', $class) . ".php";
$resolved_name = stream_resolve_include_path($filePath);
if ($resolved_name !== false) {
include $resolved_name;
}
}
public function register()
{
spl_autoload_register(array($this, 'load'));
}
}
Registramos dentro da index.php
index.php
include 'Loader.php';
// Registrando
(new Loader)->register();
Agora você precisa fazer com que todas as requisições do seu site passe pela index, para isso, estude sobre MVC.
Depois disso, nunca mais precisará de include para suas classes, bastará instanciá-las com o "namespace", como informei acima.