Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos.
Caros,
Qual seria a melhor opção para se trabalhar com mais de um ambiente de trabalho em um projeto, usando PHP OO?
Por exemplo, quando eu fazia meus projetos sem orientação à objetos, fazia algo como:
config.php
<?php
$_CONFIG = array();
$_CONFIG['production'] = array(
'database' => array(
'name' => 'test',
'user' => 'root',
'pass' => '123456',
'port' => '3306'
)
);
$_CONFIG['staging'] = array(
'database' => array(
'name' => 'test',
'user' => 'root',
'pass' => '123456',
'port' => '3306'
)
);
index.php
<?php
if ( $_SERVER['HTTP_HOST'] === 'meuhost.com.br' )
define( 'CONFIG_APP', 'production' );
else
define( 'CONFIG_APP', 'staging' );
function insert()
{
global $_CONFIG[ CONFIG_APP ];
$config = $_CONFIG[ CONFIG_APP ];
//do something
}
Bom, como estou usando PHP OO agora, imagino que seja errado usar variáveis globais para armazenar as configurações dos meus projetos,
mesmo tendo visto isso no Code Igniter por exemplo, que é bem famoso e largamente utilizado.
Pensei então em criar uma classe para fazer um parser em um arquivo .ini com as configurações do projeto, usando a função parse_ini_file,
ou até mesmo em criar uma classe que só contém constantes, algo do tipo:
<?php
class Config
{
const MYSQL_NAME = 'test';
const MYSQL_USER = 'root';
const MYSQL_PASS = '1234';
}
Existe alguma boa prática para isto, ou seria desnecessário?
Qual seria a melhor opção para "guardar" as configurações de um projeto?
Existe algum material de leitura que me mostre o caminho?
Obrigado.
Opa, foi uma senhora resposta Marcielo! Sua colaboração foi enorme, muito obrigado mesmo.
Estarei estudando essa forma de implementação, como ainda não implementei nada em OO e estou apenas na fase de testes e estudos, isso vai ser de grande valia.
Você está no caminho..
Não só para configurações, para qualquer uso globais não devem ser usadas.
Ótimo!
Nananinanão! São configurações, devem ser facilmente configuradas..sem contar que isso não seria configurável, você estaria preso as constantes.
Acredito eu que não haja "melhor opção", o projeto deve dar suporte à opções.
Bom, irei sugerir uma forma bacana..você poderia ter uma classe configurações que as carregasse de várias formas possíveis e ao mesmo tempo as representasse, por exemplo:
class Config {
Carregando configurações a partir de um array:
A partir de um .ini:$config = Config::load('/path/to/file.ini');
ou até mesmo um arquivo php com um array:
file.php
Acessando parâmetros:
echo $config->database->host; // saída: localhost
Repare que todos os arrays se transformaram em objetos..e recursivamente, portanto:
var_dump($config->database instanceof Config); // bool(true)
Para resolução de nomes também é possível:
echo $config->database->get('db.host');
Alterando ou adicionando um parâmetro:
$config->database->host = '127.0.0.1';
Setando configurações:
class Connection {
O exemplo é apenas uma forma de demonstrar..Uma outra forma poderia ser:
interface DatabaseConfiguration {
class Configuration implements DatabaseConfiguration {
Espero ter contribuído ;)