kam umístit konstanty a soubor s nimi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
malkol
Člen | 133
+
0
-

Ahoj, kam dáváte konstanty … do jakeho souboru umístit konstanty a jak k ním potom pristupovat odkudkoliv

Dík ;)

greeny
Člen | 405
+
0
-

Ahoj, většina konstant patří logicky k nějakému objektu (např. typy nějaké entity, apod.):

<?php

class Book {
	const TYPE_TEXT = 0;
	const TYPE_COMICS = 1;

	protected $type;

	public function isComics() {
		return $this->type === self::TYPE_COMICS;
	}

	public function getType() {
		return $this->type;
	}
}

// použití

$book = new Book();
$isComics = $book->isComics();
$isText = $book->getType() === $book::TYPE_TEXT;
?>

Pokud nedokážeš konstantu nikam zařadit, pak můžeš udělat nějakou třídu jen na konstanty:

<?php

class Constants {
	const CONSTANT_ONE = 'one';
	const CONSTANT_TWO = 'two';
}

// použití

$constantOne = Constants::CONSTANT_ONE;

?>
Šaman
Člen | 2666
+
0
-

A pokud myslíš konstanty ve smyslu pevně nastavené hodnoty (nikoliv PHP konstanty), tak to patří do configu. (Různé limity, adresy pro logování, apod.)

amik
Člen | 118
+
0
-

Obecně, pokud chceš ctít princip dependency injection, zapomeň na to, že k něčemu můžeš přistupovat odkudkoli :) všechny třídy by si o všechny závislosti měly říct (v konstruktoru nebo jinak), žádné globální proměnné, konstanty ani podobné neřesti by se neměly používat.

greeny
Člen | 405
+
0
-

amik napsal(a):

Obecně, pokud chceš ctít princip dependency injection, zapomeň na to, že k něčemu můžeš přistupovat odkudkoli :) všechny třídy by si o všechny závislosti měly říct (v konstruktoru nebo jinak), žádné globální proměnné, konstanty ani podobné neřesti by se neměly používat.

Konstanty klidně používat, ale nemyslí se tím žádné nastavení (nějaké cesty, apod.), spíš jenom třeba to, co jsem ukázal na příkladu s typem knihy (konstanta jako zástupný symbol).

Viz příklad Nette\Forms\Form pravidla (Form::MIN_VALUE, etc.)