| Autor | Zpráva | ||
|---|---|---|---|
| VVenda Profil * |
#1 · Zasláno: 22. 10. 2013, 13:09:11
Ahoj, poradíte prosím někdo, proč mi tato metoda nic nevrací? Pokud obsah souboru foo.php vložím přímo do té metody tak to funguje, ale v souboru ne. Díky za pomoc
/* metoda uvnitř class */
public function foo() {
include('/foo.php');
}
/* soubor foo.php */
<?php
if($a)
return true;
else
return false; |
||
| Tori Profil |
#2 · Zasláno: 22. 10. 2013, 13:30:24
public function foo() {
return include('/foo.php');
}1, tedy implicitní návratová hodnota include).
|
||
| Joker Profil |
VVenda:
Ten kód nedělá to, co si myslíte. V tom vloženém souboru se return nachází v hlavním skriptu. To znamená, že ukončí zpracování skriptu a -protože jde o vložený skript- vrátí hodnotu nadřízenému skriptu, kde bude výsledkem příkazu include.
Čili výsledkem může být například: public function foo() {
true;
}Dále viz [#2] Tori. Ještě bych poznamenal, že mi nepřipadá jako úplně dobrý nápad vkládat vnitřky metod z externího souboru. Dal bych si do externího souboru celou třídu. Jestli je ten kód její metody potřeba na více místech, volal bych z těch dalších míst danou metodu té třídy. Pokud je metoda ve třídě, kterou se na těch ostatních místech nehodí vkládat, uspořádal bych objektový model tak, aby ta metoda byla ve třídě, která se tam hodí. |
||
| VVenda Profil * |
#4 · Zasláno: 22. 10. 2013, 14:00:00 · Upravil/a: VVenda
Díky Vám za pomoc, to mne nenapadlo. ;-)
IHMO: Proč Vám nepřipadá jako úplně dobrý nápad vkládat vnitřky metod z externího souboru. Co je na tom špatného? Každá metoda má cca 100 řádků a když mám v jedné class i 30 metod tak je kod nepřehledný. Nenapadá mne jak to lépe udělat. Ještě se zeptám k tomu 'include'. Je bezpečný takový zápis? include('/foo.php'); Nemělo by tam být z důvodu podstrčení útočníkem spíše
include('/home/virtual/domain1/www/classes/methods/Foo/foo.php');Tori: Předpokládám, že pokud nechci aby metoda něco vracela volajícímů té metody, tak tam ten return před include být nemá? |
||
| Tori Profil |
VVenda:
„Každá metoda má cca 100 řádků a když mám v jedné class i 30 metod tak je kod nepřehledný“ Jedna třída snadno může mít několik tisíc řádků. Ale stořádkové metody se mi zdají moc - to bych spíš viděla jako špatně navrhnuté metody, které dělají několik věcí naráz. Kdybyste s tím chtěl poradit, dejte asi raději ten kód na pastebin.com, sem by se do jednoho příspěvku nevešel. edit: navíc si takhle komplikujete mnoho věcí, i třeba jen obyčejné přejmenování jedné proměnné třídy. Já si (v Netbeans) jen kliknu na definici té proměnné, Ctrl+R, napíšu nové jméno, a je to přejmenované ve všech metodách. U vašeho kódu by bylo nutné otevírat všechny includy pro tu třídu a ručně nahrazovat. „Nemělo by tam být z důvodu podstrčení útočníkem spíše“ Jestli získáváte název souboru zvenčí, tak by tam nějaká ochrana být určitě měla. Jinak z důvodu funkčnosti jak na localhostu, tak na ostrém serveru bych spíš hned na začátku aplikace uložila cestu k hlavnímu adresáři do konstanty, a pak používala pouze relativní cesty vůči této konstantě. Např.: define('APP_ROOT', __DIR__);
// a jinde:
include APP_ROOT . '/classes/methods/Foo/foo.php';„Předpokládám, že pokud nechci aby metoda něco vracela volajícímů té metody, tak tam ten return před include být nemá?“ Buď, anebo může volající tu návratovou hodnotu ignorovat. |
||
| Joker Profil |
VVenda:
„Proč Vám nepřipadá jako úplně dobrý nápad vkládat vnitřky metod z externího souboru. Co je na tom špatného?“ Pak v těch externích souborech jsou kusy kódu u kterých není zřejmé, k čemu vlastně patří. „Každá metoda má cca 100 řádků a když mám v jedné class i 30 metod tak je kod nepřehledný.“ Aha, takže důvodem toho je, že kód v hlavním souboru zabírá místo? Pořiďte si editor podporující sbalování kódu (jak to funguje viz třeba obrázky zde). Doplnění: Některé vhodné editory pro PHP, placené i zdarma, jsou zmíněné ve vlákně Jaký editor pro PHP (přehled editorů). Jinak, jak píše i Tori, 100 řádků na metodu je hodně. |
||
| VVenda Profil * |
#7 · Zasláno: 22. 10. 2013, 14:42:12 · Upravil/a: VVenda
Joker:
Jinak, jak píše i Tori, 100 řádků na metodu je hodně. A to z důvodu přehlednosti nebo ztráty rychlosti PHP při zpracování ? Joker: Aha, takže důvodem toho je, že kód v hlavním souboru zabírá místo? Ano, přesně ten důvod.. |
||
| Tori Profil |
#8 · Zasláno: 22. 10. 2013, 14:58:18
VVenda:
Z důvodů: čitelnosti, přehlednosti, testovatelnosti a optimalizace, možnosti měnit vnitřek funkce nezávisle na ostatních, ... Co se týká rychlosti - jeden dlouhý soubor se načte rychleji, než krátký soubor obsahující desítky includů. Proto se často celé frameworky komprimují do jednoho velkého souboru. |
||
| Joker Profil |
VVenda:
„A to z důvodu přehlednosti nebo ztráty rychlosti PHP při zpracování ?“ Ono to vyplývá už z principu, že jedna metoda má dělat jen jednu činnost. Na jednu činnost obvykle tolik kódu není potřeba, takže když tam tolik kódu je, dělá metoda víc různých věcí a měla by se rozpadnout do více metod. (Doplnění: Samozřejmě jsou výjimky, kdy takové množství kódu prostě nutné je.) |
||
|
Časová prodleva: 13 let
|
|||
0