$form = new AppForm; vs $form = new AppForm();

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

Ahoj,
píšu si takhle komponentu s formulářem a najednou zjistím že mi nefunguje :-) dlouho mi trvalo, než jsem přišel na to, co bylo špatně.

Můžete mi nějak osvětlit, proč tento kód funguje:

$form = new AppForm;

a tento ne?

$form = new AppForm();

Ono vůbec ten první je divný, vypadá jakobych se snažil vytvořit instanci konstanty (která by se tím pádem měla jmenovat APP_FORM, podle coding standardů). Proto mě taky zarazilo, že druhý způsob hází chybu. Jsem zmaten :-)

Předem děkuji za vysvětlení.

22
Člen | 1478
+
0
-

Fungují oba zápisy, chyba bude nekde jinde, pošli celej kod…

Patrik Votoček
Člen | 2221
+
0
-

jak již bylo řečeno chyba bude jinde pošli více kódu…

natrim
Člen | 73
+
0
-

pokud ten form používáš v komponentě tak používej

<?php
$form = new AppForm($this,$name);
?>

kde $name je prvni parametr komponenty
napr.

<?php
protected function createComponentFormular($name){
$form = new AppForm($this,$name);
return $form;
}
?>
nanuqcz
Člen | 822
+
0
-

Nechápu to, teď mi to doopravdy funguje oběma způsoby…

Ale mám další související nejasnost. Snažím se teď udělat si přehled ve struktuře namespace v Nette a tak s tím trochu experimentuju. Když se třída AppForm nachází v namespace Nette\Application, pak by mělo stačit napsat use Nette\Application; a následně jen zavolat $form = new AppForm();, což nefunguje. Mám vyzkoušené, že když si vytvořím MujNamespace\mojeFunkce(), tak pak stačí napsat

use MujNamespace;
mojeFunkce();

takže pro funkce to funguje, nechápu proč ne i pro třídy… to jen tak bokem :-)

sodae
Nette Evangelist | 250
+
0
-

pokud použíješ
use Nette\Application; musíš zavolat třídu jako Application\AppForm

popřípadě použij use Nette\Application\AppForm;

cmelis
Člen | 26
+
0
-

sodae napsal(a):

pokud použíješ
use Nette\Application; musíš zavolat třídu jako Application\AppForm

popřípadě použij use Nette\Application\AppForm;

Existuje v PHP něco jako v Javě operátor hvězdička, který naincluduje všechny třídy v balíku (vím, že v PHP se to asi tak nejmenuje) ale aby nebylo potřeba vypisovat každou třídu zvlášť?

Tedy například místo:

use Nette\Application\AppForm;
use Nette\Application\Control;

Například:

use Nette\Application\*; //vím, že toto nefunguje
sodae
Nette Evangelist | 250
+
0
-

cmelis: ne

Patrik Votoček
Člen | 2221
+
0
-

právě že neexistuje… Spousta lidí na to nadává…

v6ak
Člen | 206
+
0
-

Neexistuje i již jsem tu někde vysvětloval, proč v PHP nemůže existovat, protože by PHP potřebovalo věšteckou kouli. Bylo to v nějaké diskuzi o jmenných prostorech. Jinak jsem si v Javě tuto možnost neoblíbil a dám přednost autoimportům z Eclipse.