Proč nefunguje „use function App\Neco\nejakaFunkce“

před 12 dny

ras
Člen | 131
+
0
-

Hezký den přeji všem,

ovšem nejvíce tomu :o), kdo mi dokáže vysvětlit, proč nefunguje toto:

Řekneme, že mám třídu Trida1.php

<?php
namespace App\Neco1;

final class Trida1
{
	public function superFunkce(): string
	{
		return "La vita e bella";
	}
}
?>

a pak mám druhou třídu Trida2.php

<?php
namespace App\Neco2;

use function App\Neco1\Trida1\superFunkce;

final class Trida2
{
	// zde bych chtel pouzit fukci z Tridy1
	$text = superFunkce();
}
?>

Výsledkem je však hláška

<?php
Error
Call to undefined function App\Neco1\Trida1\superFunkce()
?>

Takže je zřejmé, že je use function položka volána, ale nezafunguje … samozřejmě jsem si prošel PHP dokumentaci – http://docs.php.net/…mporting.php … ale nevidím tam rozdíl v použití oproti výše uvedenému.

Stejně tak jsem zkoušel App\Neco1\Trida1\superFunkce as test a následně pak $text = test(), ale výsledek je stejný.

Localhost: WAMP → Apache 2.4.27 + PHP 7.2.14 + Nette 3

Díky za nasměrování. Vím, že to jde řešit přes DI a např. constructor, ale raději než přidávání tam kvůli jedné funkci bych použil toto.

Vím, že to přímo nesouvisí s Nette. O to více díky.

Radek

před 12 dny

CZechBoY
Člen | 3494
+
0
-

No protoze to neni funkce, ale metoda.
Musis dat use Trida a potom Trida::metoda(…). Nicmene tvoje metoda stejne neni staticka tak ti to nepujde ani takhle.
Vyzadej si instanci tridy v konstruktoru a zavolej metodu nad objektem.

Editoval CZechBoY (24. 3. 14:26)

před 11 dny

ras
Člen | 131
+
0
-

CZechBoY napsal(a):

No protoze to neni funkce, ale metoda.
Musis dat use Trida a potom Trida::metoda(…). Nicmene tvoje metoda stejne neni staticka tak ti to nepujde ani takhle.
Vyzadej si instanci tridy v konstruktoru a zavolej metodu nad objektem.

Auu, vždyť je tak jasné … díky