-----是为题
面象对向的三大特点:封装性、继承性、多态性。
我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象。封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作。
-----引子
有人说,人是健忘的。当你遇到困难的时候,如果这个问题涉及到你的环境,你就会想法设法,去解决,绞尽脑汁,或是劳心劳力,最后解决了,往往又会很快抛之脑后,最后上天眷顾,再次降临,你又会重复上述的步骤。
-----正文
在新项目中,基于一个PHPWind论坛程序,做新功能的添加。PW写法,相对于当下主流的MVC或是前后端分离,还是有所不同。所系工作起来还是比较费力。做了一个新功能,主要是是模仿前端已经实现的功能,后端给他再添加一个,基本功能都已经实现,但是有一点小小的异常。因为这个设计到前端,而且小白的前端又不是特别好,所以主要是问了以前前端的同事,才把大致功能实现的。
前端会员发表的帖子,后台在审核的时候,可以对帖子分类和标题进行修改,然后审核通过,原始版本是有审核功能,所以这一般需要新加一个修改帖子内容的功能。帖子的分类还是比较好处理,主要是内容,因为前端是通过一个富文本wysiwyg_editor提交过来的,所以后端当然也是需要如此,:获取帖子内容,展示在富文本中,管理员可以修改内容及排班,可以预览,然后OK后提交,修改帖子。
基本实现是,复制了一个前段的富文本模板wysiwyg_editor_admin.htm,然后在修改页面content.htm加载模板,在后台content.php中新增模板的必要参数。因为富文本模板之前是在前段所以加入了些js文件的引入。大致可以达成当下的业务需求,但是在提交的第一版的时候,发现在编辑内容,和预览内容的时候,内容本身换行后,在切换代码编辑模式下,便自动生成了换行符号 "<br>”,但是前端没有如此,虽然当下很难看懂,和说明白这个富文本到底是怎么执行的,业务需要尽快。最好最快的方法当然是找不同,为什么同样处理一件事情,结果却不一样。
这个问题的着手点,一直都没有头绪,因为这哥功能,当时觉得比较难以入手,所以找的同事帮忙看的。
在发现这个问题的时候,我心里本身是抵触的,一方面,这个不大印象使用,业务这样说了,给了我一个暧昧的心态。不得不说,回过头来看,这个世界某些事情,不能有暧昧的想法,不然会影响你本来就低的工作能力的发挥。因为暧昧,所以心存侥幸,所以代码不会很健壮。但是后面,业务说了,还是需要处理。于是问题来了,我需要解决这个不知道从何入手的本来是我自己的问题的问题。
从哪里入手,这个是一个开始。我确实不知道,植物大战僵尸里面有一句经典名言,脑子是个好东西。确实,我点击这页面,看着不同的结果。脑子里面想到了,当时前端帮我处理时说过一句话,这个代码块应该是引起 Wind Code模式,和 所见即所得 模式不能切换的问题。
<input type="checkbox" name="atc_convert" id="atc_convert" value="1" checked />Wind Code自動轉換<br />
当时也有一个问题,是代码模式切换预览时候,切换没有效果,后来发现是没有引入上面的参数设置。于是引入之后就好了。对这里很可疑,我于是想到,于是查看前端这个代码块,和后台这边的复制的代码块,发现对于使用使用html代码做了一个if判断,但是我复制的后端没有,会不会是这里引起的。于是我修改了这部分,发现切换后,对于换行便没有出现自动填充"<br>"的内容,于是我有点高兴。
<!--
EOT;
if($gp_htmlcode){print <<<EOT
-->
<input type="checkbox" name="atc_html" id="atc_html" value="1" $htmcheck /><font face="verdana">使用HTML代碼</font>
<!--
EOT;
}else{print <<<EOT
-->
<font face="verdana">HTML 代碼不可用</font>
<!--
EOT;
但是很快发现,又有一个新问题,那就是重新编辑内容是没有问题,如果刷新页面,使用之前帖子的内容,变还是出现了换行自动补全<br>"的问题。我有点紧张,于是心里想前端和后台既然内容来自于同一个地方,那为什么显示回不一样呢,这,这应该是后端在获取数据的时候,做了某种处理,因为原始版本这里只是做展示,并没有修改的功能,所以他的内容应该是有所处理,但是本次修改后,是需要展示原始内容,所以这个格式???
后端的数据的问题,后端,我多么熟悉的地方啊,我的世界,我心想。于是我点击content.php文件,查看内容这个字段,发现确实在这里做了换行处理,于是我注释掉这行代码,刷新页面。
$pw_tmsgs = GetTtable($id);
$rt = $db->get_one("SELECT t.tid,t.fid,t.subject,tm.content,tm.ifconvert,t.is_video,t.video_info,t.video_status,t.video_urls,t.is_owner FROM pw_threads t LEFT JOIN $pw_tmsgs tm ON tm.tid=t.tid WHERE t.tid='$id'");
//去掉换行
//$rt['content'] = str_replace("\n","<br>",$rt['content']);
//去掉解析
//$rt['content'] = convert($rt['content'],['pic'=>1,'iframe'=>1,'mpeg'=>1,'flash'=>1]);
最后测试,和前端的功能完整切合。
-----结束
来源:oschina
链接:https://my.oschina.net/u/4326431/blog/4267045