On 02-05-2013 16:51, Bertel Lund Hansen wrote:
> Hej allesammen
>
> Jeg arbejder lige nu med at opbygge et script med klasser. I den
> forbindelse har jeg spurgt i den overordnede gruppe om globale
> konstanter bør lægges i en særlig klasse. To svar siger lettere
> ironisk at det er overflødigt.
>
> Er der andre måder i PHP at oprette en gruppe på hvor man kan
> samle beslægtede konstanter? - samme princip som f.eks.
> $_SESSION[] (men gerne en pænere notation).
>
Jada...
Lad os kigge lidt på dependency injection
Først så laver vi lige vores konfiguration i en PHP fil - den kaster
bare et array ud
<?php
return array(
'DB\PDO' => array(
'contructor' => array(
'host' => 'localhost',
'dbname' => 'testdb',
'user' => 'root',
'password' => ''
)
)
);
<?php
# DB\PDO
class DB\PDO extends \PDO {
protected $pdo;
public function __construct($host, $dbname, $user, $password) {
$this->pdo = new \PDO(sprintf('mysql:%s/%s', $host, $dbname),
$user, $password);
$this->pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE,
\PDO::FETCH_OBJ);
$this->pdo->setAttribute(\PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES
"utf8"');
}
}
Nu kan man så gøre således
<?php
use DI\Annotation\Inject;
class MyClass
{
/**
* @Inject()
* @var DB\PDO
*/
protected $db;
}
Eller man kan
<?php
class MyClass {
private $pdo;
public function __construct(DB\PDO $pdo) {
$this->pdo = $pdo;
}
}
Så er din DB\PDO klasse en del af MyClass - Dependency injection gjort
på den rigtige måde :)
http://mnapoli.github.io/PHP-DI/doc/getting-started
Du kan også bare lave en ganske simpel
<?php
# config/parameters.php
$config = array(
'foo' => 'bar'
);
Så skal du bare require din config/parameters.php hver gang, så har du
din config i $config
fx
<?php
#index.php
require 'config/parameters.php';
var_dump($config);
Her mister man så bare ret ofte IDE til at finde ud af hvad der er inde
i arrayet osv.