Autor | Zpráva | ||
---|---|---|---|
Shaim Profil |
#1 · Zasláno: 17. 10. 2013, 05:58:36
Zdravím,
příklad, dejme tomu, že includuji ze souboru funkci třeba test() (jedná se o soubor, kde je spousta funkcí pro univerzální použití). Občas je potřeba udělat drobné změny, ale nechci v tomto souboru nic provádět, chci ho mít, jak je. Je možno nějakým způsobem redeklarovat funkci? Příklad: file.php function test() { echo 1; } index.php include_once "file.php"; function test() { echo 2; } test(); Jde mi o to, aby script vypsal "2". Do původního scriptu v file.php nechci zasahovat. Rád bych to řešil pouze v rámci index.php. Nějaké řešení? Bez nutnosti přejmenovávat funkce, apod. Jde mi o to, aby file.php zůstal pro všechny weby, kde ho používám, stejný a pouze vždycky dle aktuální potřeby změnit nějakou funkci v indexu individuálně pro každý web. Snad jsem vysvětlil, co potřebuji :) |
||
Tori Profil |
#2 · Zasláno: 17. 10. 2013, 07:18:54
// extraFunkce.php (přepsané) function test() { echo 2; } // funkce.php (původní) if (!function_exists('test')) { function test() { echo 1; } } // index.php include './extraFunkce.php'; include './funkce.php'; |
||
Shaim Profil |
#3 · Zasláno: 17. 10. 2013, 13:36:10
Jasně, nějak podobně jsem to chtěl taky napsat, ale já potřebuji pouze 2 soubory.
index.php ve kterém je nejdříve includování file.php a teprve poté se provádí deklarace funkce "test". Takže function_exists by v tomto případě nepomohla. Jelikož nejdřív naincluduji tu původní funkcni a tu poté potřebuji nějak přepsat. Nějaké řešení nebo je to nereálné a budu muset využít to, co píše Tori ? |
||
Tori Profil |
#4 · Zasláno: 17. 10. 2013, 14:04:36
Přejmenovat / překrýt funkce se dá, ale není to asi nic, co by vám tu kdokoli doporučil jako rozumné řešení.
Ještě je možnost všechny ty funkce zabalit do jedné / více statických tříd a v index.php deklarovat potomka té třídy a pracovat pouze s ním. Pak byste si snadno u potomka překryl některou metodu. Jakou situaci konkrétně vlastně řešíte - je to kvůli ladění, anebo něco jiného? |
||
Joker Profil |
#5 · Zasláno: 17. 10. 2013, 14:56:23
Shaim:
V první řadě, předeklarování funkce je hrozná prasárna. Proto to je tak složité, dokonce i v PHP, kde jinak jde leccos. Vznikne kód extrémně složitý na údržbu; Asi nikdo nebude počítat s tím, že když si k funkci dohledá její deklaraci, není to skutečná deklarace funkce, která se z toho místa v kódu volá. „jedná se o soubor, kde je spousta funkcí pro univerzální použití“ Představil jsem si to jako soubor obsahující 500 rozličných funkcí, ze kterých daný kód potřebuje tři a z nich jednu jinak, než je implementovaná v tom souboru. V takovém případě by byl hlavní problém už existence toho souboru. Krom toho hlavní výhoda umístění společného kódu do vkládaných souborů je, že daná funkčnost je na jednom místě a změny se dají dělat centrálně. Ve chvíli, kdy by si část skriptů tu funkci předeklarovala, tzn. při změně funkčnosti budu muset nejdřív změnit centrální funkci a pak projít všechny skripty a vyhledat a změnit předeklarované funkce, nemá existence toho include souboru smysl. Jestli i po zvážení výše uvedeného je to předeklarování funkce pořád nutné, myslím, že s příslušným rozšířením by to šlo přes rename_function. |
||
Alphard Profil |
#6 · Zasláno: 17. 10. 2013, 15:07:52
Třeba by stačil konfigurační soubor, kde se nastaví různé konstanty/parametry. Těžko hádat ze známých údajů, ale přepsat funkci se nesnažte.
|
||
Časová prodleva: 3 dny
|
|||
Shaim Profil |
#7 · Zasláno: 20. 10. 2013, 20:54:40
Nakonec jsem využil rename_function, děkuji moc všem :)
|
||
Amunak Profil |
#8 · Zasláno: 21. 10. 2013, 00:38:03
Shaim:
„Nakonec jsem využil rename_function“ ...a to je přesně důvod, proč by se špatné nápady měly rovnou vyvracet, než prvně postovat kód. Shaim, prosím, nedělej to, uprav svůj kód tak, aby rename nepotřeboval. |
||
Časová prodleva: 11 let
|
0