legend---三、方法集思路
一、总结
一句话总结:其实也就是工具包思路,会极大的简化编程,清晰逻辑
1、多if转换成简洁单if怎么实现?
下面这段代码是错的,if的这种写法只适合直接return
1 function getblogReward($number){
2 echo $number.\'<br>\';
3 $number=intval($number);
4 echo ($number<=5);
5 if($number<=5) $ans=($number-5)*10;
6 $ans=ceil(pow(1.15,$number));
7 return $ans;
8 }
2、thinkphp中session的二维数组如何操作?
thinkphp中支持session的二维数组操作
二级数组
支持session的二维数组操作,例如:
// 赋值(当前作用域)
Session::set(\'name.item\',\'thinkphp\');
// 判断(当前作用域)是否赋值
Session::has(\'name.item\');
// 取值(当前作用域)
Session::get(\'name.item\');
// 删除(当前作用域)
Session::delete(\'name.item\');
助手函数
系统也提供了助手函数session完成相同的功能,例如:
// 初始化session
session([
\'prefix\' => \'module\',
\'type\' => \'\',
\'auto_start\' => true,
]);
// 赋值(当前作用域)
session(\'name\', \'thinkphp\');
// 赋值think作用域
session(\'name\', \'thinkphp\', \'think\');
// 判断(当前作用域)是否赋值
session(\'?name\');
// 取值(当前作用域)
session(\'name\');
// 取值think作用域
session(\'name\', \'\', \'think\');
// 删除(当前作用域)
session(\'name\', null);
// 清除session(当前作用域)
session(null);
// 清除think作用域
session(null, \'think\');
3、jquery中的attr和val都可以获取value?
1 <script>
2 $(\':checkbox#sg_is_fragment_goods\').click(function(){
3 if ($(this).prop("checked")){
4 // $(this).attr({\'value\':\'1\'});
5 // alert($(this).attr("value"));
6 $(this).val(\'1\');
7 alert($(this).val());
8 }else{
9 $(this).attr({\'value\':\'0\'});
10 alert($(this).attr("value"));
11 }
12 });
13 </script>
4、超长多级表连接(有三层,5个表)?
用户物品表到物品表到物品分类表
if($sc_id){
$myselfGoods=db(\'myself_goods\')->alias(\'mg\')->where(array(\'mg_uid\'=>$muid))->join(\'shop_goods sg\',\'mg.mg_goods_id=sg.sg_id\',\'LEFT\')->
where(\'sg_classifyid\',\'=\',$sc_id)->order(\'sg_classifyid,sg_gradeid desc,sg_id asc\')->join(\'shop_classify sc\',\'sg.sg_classifyid=sc.sc_id\',\'LEFT\')->
join(\'shop_grade sgr\',\'sg.sg_gradeid=sgr.sgr_id\',\'LEFT\')->select();
}
else {
$myselfGoods=db(\'myself_goods\')->alias(\'mg\')->where(array(\'mg_uid\'=>$muid))->join(\'shop_goods sg\',\'mg.mg_goods_id=sg.sg_id\',\'LEFT\')->
order(\'sg_classifyid,sg_gradeid desc,sg_id asc\')->join(\'shop_classify sc\',\'sg.sg_classifyid=sc.sc_id\',\'LEFT\')->
join(\'shop_grade sgr\',\'sg.sg_gradeid=sgr.sgr_id\',\'LEFT\')->select();
5、表格式显示物品如何实现?
两层循环,且总个数随内层循环而动
1 <tbody>
2 <?php
3 $length_myselfGoods=count($myselfGoods);
4 for ($i=0;$i<$length_myselfGoods;){
5 echo \'<tr>\';
6 for ($j=0;$j<6;$i++,$j++){
7 if(isset($myselfGoods[$i])){
8 echo \'<td>\'.$myselfGoods[$i]["sg_name"].\'</td>\';
9 }else{
10 echo \'<td> </td>\';
11 }
12
13 }
14 echo \'</tr>\';
15
16 }
17 ?>
18 </tbody>
6、每日自动奖励的下列做法为什么不行?
会侵占session和数据库,让系统无法正常运行
1 public function autoExe(){
2 //$beginTime=strtotime(\'2018-06-23\');
3 static $beginTimestamp=1529683200;//开始时间,这是2018-06-23的时间戳
4 ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
5 set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
6 $daily_auto_open=session(\'daily_auto_open\');
7 do{
8 //延迟更新blog时间
9 $dayTimestamp=24*60*60;
10
11 $nowTimestamp=time();
12
13 if($nowTimestamp-$beginTimestamp>$dayTimestamp){ //大于一天的情况
14 //执行方法
15 $this->dailyAllInit();
16 $this->dailyAllOperation($beginTimestamp);
17 $beginTimestamp+=$dayTimestamp;//批量执行完之后就跳到下一天
18 }else{
19 $interval=5*60;// 每隔5分钟自动运行
20 sleep($interval);
21 }
22 }while(intval($daily_auto_open));
23 echo \'<meta charset="utf8">\';
24 die(\'关闭重复方法\');
25 }
7、在base控制器里面调用继承base控制器的php控制器容易出现哪些问题?
很容易出现各种问题,比如自循环
$autoExeObj=new \app\admin\controller\DailyAutoExe();//之前形成了自循环
$autoExeObj->dailyAllInit();
$autoExeObj->dailyAllOperation($daily_auto_exe_timestamp);
8、方法集思路的好处是什么?
被被别人调用的写成方法集,自己常用的方法也写成方法集,方法集不要继承初始化控制器base
二、内容在总结中