读ThinkPHP的Example有感_PHP教程
前几天下载了ThinkPHP的代码来看,给我的印象没有CodeIgniter(CI)的那么好。或许是因为我下载的是最新的RC版本吧!里面的Examples不全,打开几个提示404,因为比较关心数据库操作方面的代码。另外,跑了一下里面的Blog的Example,功能都挺完善的。不过花了十几分钟看了一下代码,就害怕了。不大喜欢的原因有下:
1、代码很大,这么一个小blog在用了框架之后,还需要敲那么多代码,开发时间也不短吧。
2、把HTML、CSS、Script写在controller里,让controller变得很臃肿,代码也有点混乱。为何不写到View里面去呢?
protected function ajaxUploadResult($info) { // Ajax方式附件上传提示信息设置 // 默认使用mootools opacity效果 //alert($info); $show = '<script language="JavaScript" src="'%20.%20WEB_PUBLIC_PATH%20.%20'/Js/mootools.js"></script><script language="JavaScript" type="text/javascript">' . "\n"; $show .= ' var parDoc = window.parent.document;'; $show .= ' var result = parDoc.getElementById("' . $info['uploadResult'] . '");'; if (isset($info['uploadFormId'])) { $show .= ' parDoc.getElementById("' . $info['uploadFormId'] . '").reset();'; } $show .= ' result.style.display = "block";'; $show .= " var myFx = new Fx.Style(result, 'opacity',{duration:600}).custom(0.1,1);"; if ($info['success']) { // 提示上传成功 $show .= 'result.innerHTML = "<div style=\"color:#3333FF\"> 文件上传成功!";'; // 如果定义了成功响应方法,执行客户端方法 // 参数为上传的附件id,多个以逗号分割 if (isset($info['uploadResponse'])) { $show .= 'window.parent.' . $info['uploadResponse'] . '("' . $info['uploadId'] . '","' . $info['savename'] . '");'; } } else { // 上传失败 // 提示上传失败 $show .= 'result.innerHTML = "<div style=\"color:#FF0000\"> 上传失败:' . $info['message'] . '";'; } $show .= "\n" . '</script>'; //$this->assign('_ajax_upload_',$show); header("Content-Type:text/html; charset=utf-8"); exit($show); return; }
3、混合使用了Java、 www.2cto.com 微软.Net、PHP三种代码风格(或者确切的说,从Java、微软.Net借鉴了函数、文件或变量的命名风格,但是没有PHP化)。不过在使用上比较一致,出问题几率也不会太大,只是我不是很习惯。
4、在controller代码里写Business Logic和数据库操作。我看Model里的代码基本都很短,看来是基本上博客的功能都写在controller里面去了。比较像Fat Controller的写法,但是数据库的操作写到Model里应该好些吧(按我理解的MVC来说)。Fat Model比Fat Controller多很多好处,便于代码重用。
5、这个要举例说明一下,在看代码的时候,发现一句注释。
if (!empty($id)) { $Blog = D("BlogView"); $result = $Blog->where('Blog.id=' . $id)->find(); // 这里为什么用select()就读不出来 if ($result) { $this->assign('vo', $result); } else { $this->redirect('index'); return; } } else { $this->redirect('index'); }
因为我对数据库操作方面比较关心,之前看过部分ThinkPHP的文档。拜托,写这代码的朋友,TP里select读出来的是记录集,find得到的是记录,你这么assign过去,当然读不出来啦。要把$result改成$result[0]才可以读出来的嘛。这样我感觉TP的Example编写者也对使用者太不负责任了。不过也没多大问题,只是一个RC版本。
6、混合有字符串式拼凑的SQL请求,有些我没读懂!!!可能需要时间深入探究。过多使用这类SQL,会有安全隐患吧(例如SQL注入)。
public function tag() { $Tag = M("Tag"); if (!empty($_GET['name'])) { $name = trim($_REQUEST['name']); $list = $Tag->where("module='Blog' and name='$name'")->field('id,count')->find(); $tagId = $list['id']; $count = $list['count']; import("@.ORG.Page"); $listRows = 10; $fields = 'a.id,a.userId,a.categoryId,a.cTime,a.readCount,a.commentCount,a.title,c.title as category'; $p = new Page($count, $listRows); $p->setConfig('header', '篇日志 '); $dao = D("Blog"); $list = $dao->query("select " . $fields . " from " . C('DB_PREFIX') . 'blog as a,' . C('DB_PREFIX') . 'tagged as b, ' . C('DB_PREFIX') . 'category as c where b.tagId in (' . $tagId . ') and a.categoryId= c.id and a.status=1 and a.id=b.recordId order by a.id desc limit ' . $p->firstRow . ',' . $p->listRows); if ($list) { $page = $p->show(); $this->assign("page", $page); $this->assign('list', $list); } $this->assign('tag', $name); $this->assign("count", $count); } else { $list = $Tag->where("module='Blog'")->select(); //dump($list); $this->assign('tags', $list); } $this->display(); }
7、代码风格能体现一个程序员的水平,跟CI的Examples相比,还是有一定差距。注释写的比较随意。我有时写代码,注释也挺随意的。有时候为了尊重其他人,还是需要像写代码一样很大耐心地去写注释。
8、跟代码无关。附带的用户文档不是很人性化,在我本本上都看到字体很大,行距很大,一段简单功能的PHP代码就显示了两页。有些代码为了语法高亮使用了图片,不过图片的质量太低了,可能我玩多了单反。作成HTML其实也方便用户使用、查找的嘛,弄个PDF多了些麻烦。
以上观点仅针对ThinkPHP 3.0 RC1的Example而言。我没有看过核心代码,所以无权评论。同时也没有否定国内MVC框架实力的意思,只不过我觉得,TP的开发者应该在一些细节上多下些功夫,多灌注一些心血,让TP的手册和例子的质量有所提高!
摘自 Xiaoxia

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

红果短剧不仅是一个观赏短剧的平台,更是一个内容丰富的宝库,其中还包括了小说等精彩内容。对于许多热爱阅读的用户来说,这无疑是一个巨大的惊喜。然而很多用户们还不太了解究竟该如何在红果短剧中下载并观看这些小说内容,在下文中本站小编就将为大家带来详细的下载步骤介绍,希望能帮助到各位有需要的小伙伴们。红果短剧怎样下载观看答案:【红果短剧】-【听书】-【文章】-【下载】。具体步骤:1、首先打开红果短剧软件,进入到首页中后我们点击页面上方的【听书】按钮;2、然后在小说的页面中我们可以看到有很多的文章内容,在这

当你在自己电脑上登过别人steam账号之后,恰巧这个别人的账号也有wallpaper软件,切换回自己账号之后steam就会自动下载别人账号订阅的壁纸,用户可以通过关闭steam云同步解决。wallpaperengine登录别的号后下载别人的壁纸怎么办1、登陆你自己的steam账号,在设置里面找到云同步,关闭steam云同步。2、登陆你之前登陆的别人的steam账号,打开wallpaper创意工坊,找到订阅内容,然后取消全部订阅。(以后防止找不到壁纸,可以先收藏再取消订阅)3、切换回自己的stea

最近有很多用户都在问小编,115://开头的链接怎么下载?想要下载115://开头的链接需要借助115浏览器,大家下载好115浏览器后,再来看看下面小编整理好的下载教程吧。 115://开头的链接下载方法介绍 1、登录115.com,下载115浏览器并安装。 2、在115浏览器地址栏输入:chrome://extensions/,进入扩展中心,搜索Tampermonkey,安装对应插件。 3、在115浏览器地址栏输入: 油猴脚本:https://greasyfork.org/en/

超级人类(superpeople)游戏可以通过steam客户端下载游戏,这款游戏的大小在28G左右,下载到安装通常需要一个半小时,下面为大家带来具体的下载安装教程!新的申请全球封闭测试方法1)在Steam商店(steam客户端下载)搜索“SUPERPEOPLE”2)点击“SUPERPEOPLE”商店页面下方的“请求SUPERPEOPLE封闭测试访问权限”3)点击请求访问权限按钮后,将在Steam库中可确认“SUPERPEOPLECBT”游戏4)在“SUPERPEOPLECBT”中点击安装按钮并下

不少的用户们在使用夸克网盘的时候需要将文件下载下来,可我们想让他保存在本地,那么这要怎么设置?下面就让本站来为用户们来仔细的介绍一下夸克网盘下载文件保存回本地的方法吧。 夸克网盘下载文件保存回本地的方法 1、打开夸克,登录账号进去,点击列表图标。 2、点击图标之后,选择网盘。 3、进去夸克网盘之后,点击我的文件。 4、进去我的文件之后,选择要下载的文件,点击三点图标。 5、勾选要下载的文件,点击下载就行了。

foobar2000是一款能随时收听音乐资源的软件,各种音乐无损音质带给你,增强版本的音乐播放器,让你得到更全更舒适的音乐体验,它的设计理念是将电脑端的高级音频播放器移植到手机上,提供更加便捷高效的音乐播放体验,界面设计简洁明了易于使用它采用了极简的设计风格,没有过多的装饰和繁琐的操作能够快速上手,同时还支持多种皮肤和主题,根据自己的喜好进行个性化设置,打造专属的音乐播放器支持多种音频格式的播放,它还支持音频增益功能根据自己的听力情况调整音量大小,避免过大的音量对听力造成损害。接下来就让小编为大

运行 ThinkPHP 项目需要:安装 Composer;使用 Composer 创建项目;进入项目目录,执行 php bin/console serve;访问 http://localhost:8000 查看欢迎页面。

夸克作为一款方便实用的网盘工具,能够帮助用户轻松获取喜欢的资源,如果想将某个文件下载到本地要如何操作呢?下面就由小编来告诉大家,赶快一起学习一下吧!夸克网盘下载到本地方法分享1、首先打开夸克软件,进入到首页之后我们点击右下方的【云图标】;2、然后在夸克网盘的页面中我们点击其中的【文档】功能;3、接着来到文档的页面中选择好需要下载的文件之后点击【三点图标】;4、最后点击过后在弹出的对话框中我们点击【下载】即可;
