Vlastní funkce (struktura + zavolání)

ForestCZE
Člen | 209
+
0
-

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ě.

  1. Kam vytvořit php soubor s takovou fcí? Např. /app/…
  2. Jak zavolat fci bez echa?

Díky předem za vysvětlení.

Martk
Člen | 651
+
+2
-

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
+
0
-

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.

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?

CZechBoY
Člen | 3608
+
+2
-

No sluzbu prave ne.
Pokud bys chtel sluzbu tak si na to jeste udelej tovarnu a tu dej do sluzeb. Metoda create bude prijimat jen cestu.