Joyride Posted July 17, 2008 Report Posted July 17, 2008 Ir TRequest klase, kura kalpo ka reģistrs visiem superglobāļiem (GET, POST, COOKIE, SERVER) class TRequest { $SERVER = array(); public function __construct() { $this->SERVER = $GLOBALS['_SERVER']; unset($GLOBALS['_SERVER']); } } Lieta tāda, ka ja PHP konfigurācijā "auto_globals_jit" ir uzstādīts uz "On", tad: "the SERVER and ENV variables are created when they're first used (Just In Time) instead of when the script starts." Šādā gadījumā, TRequest::__construct metodē $GLOBALS['_SERVER'] ir neeksistējošs mainīgais, tā arī ir problēma, kuru gribu atrisināt. Viens variants ir kautkur ārpus visām klašu metodēm un funkcijām (piem. skripta sākumā) likt PHP izveidot šo mainīgo kaut vai šādi: $_SERVER['dummy'] = 1; ... un tad izveidot Request klasi. Vai ir vēl kāds veids to panākt, nepiesārņojot kodu ar šādu paņēmienu?
andrisp Posted July 17, 2008 Report Posted July 17, 2008 $this->SERVER = $_SERVER; ? It kā taču vajadzētu strādāt, jo tu akseso $_SERVER, tātad izmanto. Bet vispār - man kaut kā neliekas laba doma unsetot šos globālos mainīgos. Ja nu kāds third party scripts tos izmanto ? Kāpēc vispār taisi tā ? Kāds praktisks iemesls ?
Joyride Posted July 18, 2008 Author Report Posted July 18, 2008 andrisp - Paldies! $GLOBALS['_SERVER'] nestrādāja, bet $_SERVER strādā! Unset globālajiem taisu tādēļ, lai programmētājs būtu spiests lietot Request klasi, lai piekļūtu šiem mainīgajiem, jo pirms tam vajag veikt dažādus drošības pasākumus, piem. strip_tags, vai stripslashes, atkarībā no mainīgā + vēl rewrite url funkcionalitāte (nevis $_GET['module'], bet, piem. $REQUEST->module, $REQUEST->lang, $REQUEST->param('id') utt.) un daudzas citas lietas. Vārdu sakot, vienots interfeiss. Bez tam tiks lietots custom sesiju klase, tā kā par $_SESSION arī var aizmirst. Pagaidām netiek izmantots neviens 3rdparty skripts. Ja būs vajadzība pēc kāda, tad veikšu mazas izmaiņas :)
Recommended Posts