手把手教你做关键词匹配项目(搜索引擎)---- 第十三天,教你做第十三天
第十三天
自从小帅帅被于老大批了之后,心里非常不爽,因为有这样的理由:我已经做到了你想要的,为什么还得不到肯定。
什么样的程序员才是优秀的?小帅帅带着这样的疑问去了解设计模式。
尽管他把设计模式看了很多遍,甚至连设计模式的名字背得滚瓜烂熟,单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式...等。
但是小帅帅还是不知道如何去用,没办法,他只好再次去请教于老大,于老大给了一份代码让他去看,看看里面用了什么设计模式。
什么样的程序员才是优秀的?有人说,优秀的程序员是写出可以阅读的代码,而普通的程序员是写出可以运行的代码。
于老大的代码如下:
<?<span>php </span><span>class</span><span> SelectorItem { </span><span>private</span> <span>$item</span><span>; </span><span>public</span> <span>function</span> __construct(<span>$item</span><span>){ </span><span>$this</span>->item = <span>$item</span><span>; } </span><span>public</span> <span>function</span> __get(<span>$name</span><span>){ </span><span>if</span>(<span>isset</span>(<span>$this</span>->item-><span>$name</span><span>)){ </span><span>return</span> <span>$this</span>->item-><span>$name</span><span>; } </span><span>return</span> <span>null</span><span>; } </span><span>public</span> <span>static</span> <span>function</span> createFromApi(<span>$num_iid</span><span>){ </span><span>$client</span> = <span>new</span><span> TopClient(); </span><span>$client</span>->appkey = 'xx'<span>; </span><span>$client</span>->secretKey = 'xx'<span>; </span><span>$req</span> = <span>new</span><span> ItemGetRequest(); </span><span>$req</span>->setFields('props_name,property_alias,detail_url,cid,title'<span>); </span><span>$req</span>->setNumIid(<span>$num_iid</span><span>); </span><span>$resp</span> = <span>$client</span>->execute(<span>$req</span><span>); </span><span>if</span>(<span>isset</span>(<span>$resp</span>-><span>code)){ </span><span>#</span><span> error handle</span> <span>throw</span> <span>new</span> <span>Exception</span>(<span>$resp</span>->msg, <span>$resp</span>-><span>code); } </span><span>return</span> <span>new</span> self(<span>$resp</span>-><span>item); } } </span><span>class</span><span> CharList { </span><span>private</span> <span>$core</span> = <span>array</span><span>(); </span><span>private</span> <span>$blacklist</span> = <span>array</span><span>(); </span><span>public</span> <span>function</span> addCore(<span>$char</span><span>){ </span><span>if</span>(!<span>in_array</span>(<span>$char</span>,<span>$this</span>-><span>core)) </span><span>$this</span>->core[] = <span>$char</span><span>; } </span><span>public</span> <span>function</span><span> getCore(){ </span><span>return</span> <span>$this</span>-><span>core; } </span><span>public</span> <span>function</span> addBlacklist(<span>$char</span><span>){ </span><span>if</span>(!<span>in_array</span>(<span>$char</span>,<span>$this</span>-><span>blacklist)) </span><span>$this</span>->blacklist[] = <span>$char</span><span>; } </span><span>public</span> <span>function</span><span> getBlacklist(){ </span><span>return</span> <span>$this</span>-><span>blacklist; } } </span><span>abstract</span> <span>class</span><span> CharListHandle { </span><span>protected</span> <span>$charlist</span><span>; </span><span>public</span> <span>function</span> __construct(<span>$charlist</span><span>){ </span><span>$this</span>->charlist = <span>$charlist</span><span>; } </span><span>abstract</span> <span>function</span> <span>exec</span><span>(); } </span><span>class</span> MenCharListHandle <span>extends</span><span> CharListHandle { </span><span>public</span> <span>function</span> <span>exec</span><span>(){ </span><span>$this</span>->charlist->addCore("男装"<span>); </span><span>$this</span>->charlist->addBlacklist("女"<span>); } } </span><span>class</span> WomenCharListHandle <span>extends</span><span> CharListHandle{ </span><span>public</span> <span>function</span> <span>exec</span><span>(){ </span><span>$this</span>->charlist->addCore("女装"<span>); </span><span>$this</span>->charlist->addBlacklist("男"<span>); } } </span><span>#</span><span> 其他CharList Handle小帅帅完成</span> <span>class</span><span> Selector { </span><span>private</span> <span>static</span> <span>$charListHandle</span> = <span>array</span><span>( </span>"男装"=>"MenCharListHandle", "女装"=>"WomenCharListHandle", "情侣装"=>"LoversCharListHandle", "童装"=>"ChildrenCharListHandle"<span> ); </span><span>public</span> <span>static</span> <span>function</span> select(<span>$num_iid</span><span>){ </span><span>$selectorItem</span> = SelectorItem::createFromApi(<span>$num_iid</span><span>); Logger</span>::trace(<span>$selectorItem</span>-><span>props_name); </span><span>$matchTitle</span> = <span>$selectorItem</span>->title.<span>$selectorItem</span>-><span>props_name; </span><span>$charlist</span> = <span>new</span><span> CharList(); </span><span>foreach</span>(self::<span>$charListHandle</span> <span>as</span> <span>$matchKey</span>=><span>$className</span><span>){ </span><span>if</span>(<span>preg_match</span>("/<span>$matchKey</span>/",<span>$matchTitle</span><span>)){ </span><span>$handle</span> = self::createCharListHandle(<span>$className</span>,<span>$charlist</span><span>); </span><span>$handle</span>-><span>exec</span><span>(); } } </span><span>//</span><span>do search things </span> <span> } </span><span>public</span> <span>static</span> <span>function</span> createCharListHandle(<span>$className</span>,<span>$charlist</span><span>){ </span><span>if</span>(<span>class_exists</span>(<span>$className</span><span>)){ </span><span>return</span> <span>new</span> <span>$className</span>(<span>$charlist</span><span>); } </span><span>throw</span> <span>new</span> <span>Exception</span>("class not exists",0<span>); } }</span>
小帅帅看了代码后再也按耐不住了,这就是传说中的于老大,还不是抄的我的代码。。。
于老大要是听到小帅帅的想法,会有什么举动呢?
小帅帅没办法继续去研究神功秘籍。

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考虑使用AttActAcks.s.s.4)

会话再生是指在用户进行敏感操作时生成新会话ID并使旧ID失效,以防会话固定攻击。实现步骤包括:1.检测敏感操作,2.生成新会话ID,3.销毁旧会话ID,4.更新用户端会话信息。

PHP会话对应用性能有显着影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。