全宇宙最好的编程语言 PHP 入门是非常简单的,但编程是件非常复杂的事情,代码的性能、兼容性、维护成本等等都是需要考虑的,这篇内容就说说 PHP 的编程技巧,笔者水平有限,只能将自己知道的东西分享出来,高手请略过。
下面以【爱玩电脑】后台添加内容的代码片段做示例,主要是将程序的“逻辑判断”和“操作过程”还有“视图”分开,即大家常说的 MVC 模式。
先看“逻辑判断”的部分代码 content.php , 主要使用 php switch() 进行逻辑判断实现操作控制 。
$action = get('action'); switch ($action) { //添加内容 case 'add': $data['catalog_option'] = $content->catalog_option(); template2('content_add', $data); break; //添加内容处理 case 'add_post': $array = $content->add_post(); echo json_encode($array); exit(); break; }
浏览器访问负责“逻辑判断”的文件 content.php ,程序中通过 $action 变量判断操作,然后调用负责“操作过程”的文件 class/content.php 中相应的方法。
/** * add_post() * return array('error', 'message') */ public function add_post () { $title = post('title'); $catalog = post('catalog'); $keywords = str_replace(',', ',', post('keywords')); $description = htmlspecialchars(post('description')); $tags = str_replace(',', ',', post('tags')); $text = post('text'); $time = post('time'); $time = strtotime($time) ? strtotime($time) : time(); $comment = post('comment'); $comment = $comment ? 1 : 0; $remote = post('remote'); $yuan = post('yuan'); $yuan = $yuan ? 1 : 0; $thumb = post('thumbInput'); //表单验证 if (!$title || !$text) return array("error"=>1, 'message'=>'标题和正文必须填写'); $id = $this->mysql->insert('INSERT INTO `xxx_content` (`user_id`, `catalog_id`, `update_time`, `allow_comment`, `visit`, `title`, `tags`, `keywords`, `description`, `thumb`, `yuan`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);', array(user::id(), $catalog, $time, $comment, rand(10, 99), $title, $tags, $keywords, $description, $thumb, $yuan)); if ($id <= 0) { return array("error"=>1, 'message'=>'添加失败 Table_1'); } else { $text = $this->text_tag_link($text); $this->update_tag($tags, $id); if ($remote) $text = $this->remote($text); $ok = $this->mysql->insert('INSERT INTO `xxx_content_text` (`content_id`, `text`) VALUES (?, ?);', array($id, $text)); if ($ok <= 0) return array("error"=>1, 'message'=>'添加失败 Table_2'); else return array("error"=>0, 'message'=>$id); } }
因为整个操作过程都在 conntent::add_post() 中完成所以代码比较长,主要实现了表单验证、正文处理、设置标签、下载远程图片等功能。
因为成功增加内容后需要一个“查看内容”的按钮,所以 content::add_post() 中将所有提示信息以数组形式返回 array('error'=>true, 'message'=>'abc....') ,方便 content.php 更容易与前台对接。
至于“视图”Aowana 做得非常简单,并没有使用模板引擎,只是写了个 template2() 方法把视图和程序分离而已,下面是调用视图的示例:
//添加内容 case 'add': $data['catalog_option'] = $content->catalog_option(); template2('content_add', $data); break;
~完~