Proč nefunguje „use function App\Neco\nejakaFunkce“
- ras
- Člen | 135
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
- ras
- Člen | 135
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