Vlastní funkce (struktura + zavolání)
- ForestCZE
- Člen | 209
Ahoj, rád bych se zeptat, jak navrhovat vlastní funkce v PHP zhlediska struktury a zavolání.
Mimo Nette FW jsem si prostě kdekoliv vytvořil soubor, pak použil
require_once
a hotovo. Jenže jak je to v Nette?
Mám např. fci:
function PocetSouboru($cesta)
{
$folder = opendir($cesta);
$num = 0;
while($file = readdir($folder)){
$num++;
}
}
A nyní si tu fci budu chtít zavolat třeba v handle metodě.
- Kam vytvořit php soubor s takovou fcí? Např. /app/…
- Jak zavolat fci bez echa?
Díky předem za vysvětlení.
- Martk
- Člen | 661
A proč si k tomu nevytvoříš třídu?
class Directory {
private $dir;
public function __construct(string $dir) {
// TODO: kontrola, jestli se jedna pravdu o slozku
$this->dir = $dir;
}
public function fileCount(): int {
return iterator_count(new FilesystemIterator($this->dir, FilesystemIterator::SKIP_DOTS));
}
}
Klidně to může být i statická funkce, ale když už používáš oop jazyk, tak bych se držel tohoto konceptu, navíc v tom budeš mít pořádek, protože každá třída bude dělat své a nebudeš to mít roztroušené po souborech ve funkcích.
- ForestCZE
- Člen | 209
Martk napsal(a):
A proč si k tomu nevytvoříš třídu?
class Directory { private $dir; public function __construct(string $dir) { // TODO: kontrola, jestli se jedna pravdu o slozku $this->dir = $dir; } public function fileCount(): int { return iterator_count(new FilesystemIterator($this->dir, FilesystemIterator::SKIP_DOTS)); } }
Klidně to může být i statická funkce, ale když už používáš oop jazyk, tak bych se držel tohoto konceptu, navíc v tom budeš mít pořádek, protože každá třída bude dělat své a nebudeš to mít roztroušené po souborech ve funkcích.
Napsat si třídu mě vůbec nenapadlo. S OOP prakticky začínám, takže
jsem si to ani nějak neuvědomil :D
Každopádně se mi na tom ukázkovém příkladu nezdá jedna věc.
V BasePresenter.php jsem si nastavil:
/** @var \App\Model\Directory @inject*/
public $promenna;
A pak to v jiném presenteru volám:
$this->promenna->fileCount();
Což je asi v pořádku. Kde ale pak předám constructoru cestu ke složce?