legend---六、php脚本变量的生命周期是怎样的

2023-02-25,,

legend---六、php脚本变量生命周期是怎样

一、总结

一句话总结:应该是脚本结束变量的生命周期就完了

1、外部js找不到元素是怎么回事?

1 function myDailyTaskFinish() {
2 //alert('11');
3 $(document).ready(function () {
4 alert($('#my_dayly_task_unfinished_content').length);
5 });
6
7 }
8 myDailyTaskFinish();

a、方法未执行 myDailyTaskFinish();

8 myDailyTaskFinish();

b、给循环中的元素加了id   比如完成任务的button

c、在开头引入的js,但是没有声明文档加载完再执行   $(document).ready(function () {

2、页面的部分循环的时候,外部调js不是很方便,传递的参数获取不到怎么办?

 1 /*每日任务完成*/
2 function myDailyTaskFinish() {
3 //alert('11');
4 $(document).ready(function () {
5 //alert($('#my_dayly_task_unfinished_content > ul > li > section > dl > dt > span > button').length);
6 $('#my_dayly_task_unfinished_content > ul > li > section > dl > dt > span > button').click(function () {
7 $.post("task/finishDailyTask", { tdr_id: "John", td_id: "2pm", dailyTaskDate: "2pm" },
8 function(data){
9 alert("Data Loaded: " + data);
10 });
11 alert('111');
12 });
13 });
14
15 }
16 //myDailyTaskFinish();
 1                             <h2>每日任务(未完成)</h2>
2 <span class="am-list-news-more am-fr">更多 &raquo;</span>
3 </a>
4 </div>
5
6 <div class="am-list-news-bd" id="my_dayly_task_unfinished_content">
7 <ul class="am-list">
8 {volist name="dailyTaskData" id="vo"}
9 <?php if($vo['t_d_r_isfinish']=='1') continue; ?>
10 <li class="am-g am-list-item-dated">
11 <section data-am-widget="accordion" style="background: #fff;margin: 0px;box-shadow: none;" class="am-accordion am-accordion-default" data-am-accordion='{ "multiple": true }' >
12 <dl class="am-accordion-item" >
13 <dt class="am-accordion-title my_ellipsis" style="padding-left:2px ;">
14 <a class="am-list-item-hd " style="display:inline;"><span class="task_title">{$vo.t_day_name}</span></a>
15 <span class="am-list-date" style="float: right;margin-right: 0px;"><button class="task_finish" onclick="document.location='{:url(\'task/finishDailyTask\',array(\'tdr_id\'=>$vo.t_d_r_id,\'td_id\'=>$vo.t_d_r__id))}';event.stopPropagation();">完成任务</button></span>
16 <div class="am-cf"></div>
17 </dt>

3、为什么ajax可以传送数据给php(因为{})?

因为thinkphp的模板当中也是用{}来表示变量或者函数的

1 $.post("test.php", { name: "John", time: "2pm" },
2 function(data){
3 alert("Data Loaded: " + data);
4 });

4、thinkphp区间查询如何实现?

区间查询是一种同一字段多个查询条件的简化写法,例如:

Db::table('think_user')
->where('name',['like','thinkphp%'],['like','%thinkphp'])
->where('id',['>',0],['<>',10],'or')
->find();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1

区间查询的查询条件必须使用数组定义方式,支持所有的查询表达式。

 1     //1、获取n等级到m等级的什么类型的随机物品(多少数量的话我在外面多调用几次这个函数就好了)
2 public function getRandomGoods($n,$m,$type){
3 //在这个函数里面找到等级,找到类型
4 //先连表,再选,就好了
5 $shopGoodss=db('shop_goods')->alias('sg')->
6 order('sg_classifyid,sg_gradeid desc,sg_id asc')->
7 join('shop_classify sc','sg.sg_classifyid=sc.sc_id','LEFT')->
8 join('shop_grade sgr','sg.sg_gradeid=sgr.sgr_id','LEFT')->
9 where('sgr_num',['>',$n-1],['<',$m+1])->select();
10 dump($shopGoodss);die;
11 }

5、一组代码中的两个foreach循环变量重名会有莫名其妙的错误的(因为是指针)原因是什么?

 1     //3、根据数据库里面的一条博客记录生成题目
2 public function createPerBlogQuestion($perBlogData){
3 //dump($perBlogData);die;
4 $question=[];
5 $content=htmlspecialchars_decode($perBlogData['b_content']);
6 $pattern='/<\/h2>(.*?)<h2>/us';
7 preg_match_all($pattern, $content, $out);
8 $summary=$out[1][0];
9 //去掉总结总多余的<p>&nbsp;</p>
10 $pattern='/<p>&nbsp;<\/p>|\n+|\s+/us';
11 $summary=preg_replace($pattern,'', $summary);
12 //以<h3>和</h3>做分割,就能把这个拆成我们想要的那些段
13 $pattern='/<h3>|<\/h3>/us';
14 $summaryArr=preg_split($pattern, $summary);
15
16 array_unshift($summaryArr,$perBlogData['b_title'].'?');
17 foreach ($summaryArr as $key => &$val){
18 if(!strlen($val)){
19 $val=null;
20 }
21 }
22
23 $summaryArr = array_diff($summaryArr, [null]);
24
25 $summaryArr = array_values($summaryArr);
26
27 $question_stem=[];
28 $question_ans=[];
29 $first=true;
30 foreach ($summaryArr as $key1=>$val1){
31 if($first){
32 $question_stem[]=$val1;
33 $first=false;
34 }else{
35 $a=$val1[0];
36 if(is_numeric($a)){
37 $question_stem[]=$val1;
38 }else{
39 $question_ans[]=$val1;
40 }
41 }
42 }
43
44 dump($summaryArr);die;
45
46 }

6、get方式用?链接参数的错误是什么?

get方式连接的话前面是?接参数,后面参数之间是&符号,不是全是?号

写成全是问号就错了

在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。如果网页中的<form>表单元素的method属性被设置为“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
使用GET请求方式给WEB服务器传递参数的格式:
http://www.it315.org/counter.jsp?name=zhangsan&password=123
使用GET方式传送的数据量一般限制在1KB以下。

7、在写模型方法的时候循环里面可能有错怎么处理?

循环里面可以忽略中间某个数据的问题,不然后面的就不执行了

比如第9行的return false不要就比较好,但是,小逻辑里面,要及时return false,避免语法错误。

前面对后面有影响,前面出错,return false;

前面对后面没有影响,每个都是独立的一条, 那就没必要 return false;

 1     //2、做根据数据库里面的博客生成题目的操作,一段时间
2 public function createQuestion_interval($str_begin,$str_end){
3 $commonFunctionModel=new CommonFunction();
4 $beginDateTS=$commonFunctionModel->getDateTimeStamp_date($str_begin);
5 $endDateTS=$commonFunctionModel->getDateTimeStamp_date($str_end);
6 $perdayTS=24*60*60;
7 for($i=$beginDateTS;$i<=$endDateTS;$i+=$perdayTS){
8 $ans=$this->createQuestion($i);
9 //if($ans===false) return false;
10 }
11 return true;
12
13 }

8、thinkphp的field排除字段如何实现?

字段排除

如果我希望获取排除数据表中的content字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:

Db::table('think_user')->field('content',true)->select();

则表示获取除了content之外的所有字段,要排除更多的字段也可以:

Db::table('think_user')->field('user_id,content',true)->select();
//或者用
Db::table('think_user')->field(['user_id','content'],true)->select();

9、从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)?

 1     //3、一个完完全全随机的从题库中获取题目的函数
2 public function battle_entirely_random_question(){
3 //可以先拼接数据,也可以后拼接数据,完全都ok的
4 $data=Db::query("SELECT * FROM lg_blog_question WHERE bq_id >= (((SELECT MAX(bq_id) FROM lg_blog_question)-(SELECT MIN(bq_id) FROM lg_blog_question)) * RAND() + (SELECT MIN(bq_id) FROM lg_blog_question)) LIMIT ?",[5]);
5 //dump($data);die;
6 if($data){
7 shuffle($data);
8 if(isset($data[0])){
9 $blogModle=new Blog();
10 $blogData=$blogModle->getBlogDateById($data[0]['bq_b_id']);
11 if(!$blogData) return false;
12 $result=array_merge($data[0],$blogData);
13 dump($result);die;
14 //拼接
15 return $data[0];
16 }
17 return false;
18 }else{
19 return false;
20 }
21 }

10、如何实现答题正确和答题错误的post方式提交?

用隐藏域传答题正确或者答题错误的参数,如果正确的话,就把错误隐藏域设置为disabled,那么错误隐藏域就传递不过去数据,只有正确隐藏域能够传递过去数据

1 <!--隐藏域-->
2 <input type="hidden" name="questionNum" value="{$questionNum}">
3 <input type="hidden" name="type" value="{$type}">
4 <input id="answer_right" type="hidden" name="answer" value="right">
5 <input id="answer_wrong" type="hidden" name="answer" value="wrong">
6 <!--END 隐藏域-->
 1 <script>
2 /************1、提交表单:正确或者错误方式*************/
3 function submitForm(){
4 $('#battle_submit_wrong').click(function () {
5 $('#answer_right').attr('disabled',true);
6 $('form').submit();
7 });
8 $('#battle_submit_right').click(function () {
9 $('#answer_wrong').attr('disabled',true);
10 $('form').submit();
11 });
12 }
13 submitForm();
14
15 </script>

11、复杂控制器的业务逻辑是怎样的?

控制器再复杂的业务 逻辑,也就两块,申请业务逻辑和持续业务逻辑

这里是试题挑战:分为请求试题挑战  和  试题挑战页面下的下一题

  1 //1、战斗主页
2 public function index(){
3 /**************************1、向页面传递数据**************************/
4 /**1、像页面分配任务分类数据**************************/
5 $blogModel=new Blog();
6 $blogCategorys=$blogModel->getBlogCategory();
7 if($blogCategorys!==false) $this->assign('blogCategorys',$blogCategorys);
8
9 return view();
10 }
11
12 //2、战斗的战斗页面,一题一题的来就好,根据传过来的参数选择题目
13 public function battle(){
14 $modelBattle=new ModelBattle();
15
16 /**************************1、处理战斗请求页面的逻辑**************************/
17 $question=null;
18 $type=input('type');
19 $questionNum=input('questionNum');
20 if(!$questionNum) $questionNum=1;
21 else $questionNum++;
22
23 //dump($questionNum);die;
24 //1、随机战斗--完全随机战斗
25 if($type=='battle2_random'){
26 //dump($type);die;
27 $question=$modelBattle->battle_entirely_random_question();
28
29 }else if($type=='battle2_right'){ //2、随机战斗--根据对的次数随机战斗
30 $question=$modelBattle->battle_random_question();
31
32 }else if($type=='today'){
33 //取昨天的数据
34 dump($type);die;
35 }
36 else if($type=='yesterday'){
37 dump($type);die;
38 }
39 else if($type=='2daybefore'){
40 dump($type);die;
41 }
42 else if($type=='3daybefore'){
43 dump($type);die;
44 }
45 else if($type=='date'){
46 $date=input('date');
47 dump($date);die;
48 }
49 //5、向页面分配数据
50 //dump($question);die;
51 if($question){
52 $question['bq_answer']=htmlspecialchars_decode($question['bq_answer']);
53 $this->assign([
54 'question'=>$question,
55 'questionNum'=>$questionNum,
56 'type'=>$type
57 ]);
58 }else{
59 $this->error('没有试题数据!!!');
60 }
61
62
63
64 /**************************2、处理具体战斗中的的逻辑**************************/
65 if (request()->isPost()){
66 //1、处理输入的数据
67 $dataIn=input('post.');
68 $question=null;
69 $type=$dataIn['type'];
70 $questionNum=$dataIn['questionNum']+1;
71
72 //2、根据答题情况获取奖励
73 $muid=base64_decode(session('muid'));
74 $questionRewardModel=new QuestionReward();
75 switch ($dataIn['answer']){
76 case 'right':
77 if (intval($dataIn['bq_diff'])>99){
78 $questionRewardModel->giveQuestionReward($muid,'right','blog',$dataIn['questionNum']);
79 }else{
80 $questionRewardModel->giveQuestionReward($muid,'right','blog_question',$dataIn['questionNum']);
81 }
82 break;
83 case 'wrong':
84 if (intval($dataIn['bq_diff'])>99){
85 $questionRewardModel->giveQuestionReward($muid,'wrong','blog',$dataIn['questionNum']);
86 }else{
87 $questionRewardModel->giveQuestionReward($muid,'wrong','blog_question',$dataIn['questionNum']);
88 }
89 break;
90 }
91 //dump($dataIn);die;
92
93 //4、修改题目的作对做错情况,也就是做的次数情况
94 $mapID['bq_id']=['=',$dataIn['bq_id']];
95 $ans_bq_times=db('blog_question')->where($mapID)->setInc('bq_times');
96 if(!$ans_bq_times) $this->error('更新做题次数失败!!');
97 switch ($dataIn['answer']){
98 case 'right':
99 $ans_bq_right=db('blog_question')->where($mapID)->setInc('bq_right');
100 if(!$ans_bq_right) $this->error('更新做题作对次数失败!!');
101 break;
102 case 'wrong':
103 $ans_bq_wrong=db('blog_question')->where($mapID)->setInc('bq_wrong');
104 if(!$ans_bq_wrong) $this->error('更新做题作错次数失败!!');
105 break;
106 }
107
108
109 //3、处理提交上来的题目难度和博客分类
110 //3.1、处理提交上来的题目难度
111 $ans_bq_diff=db('blog_question')->where($mapID)->update(['bq_diff'=>$dataIn['bq_diff']]);
112 if($ans_bq_diff===false) $this->error('更新题目难度失败!!');
113 //dump($question);die;
114 //3.2、处理提交上来的博客分类
115 $mapBlogID['b_id']=['=',$dataIn['b_id']];
116 if(is_numeric($dataIn['b_c_id'])){
117 $ans_b_c_id=db('blog')->where($mapBlogID)->update(['b_c_id'=>$dataIn['b_c_id']]);
118 if($ans_b_c_id===false) $this->error('更新博客分类失败!!');
119 }
120
121
122
123 /****-----------------------------------------------------------------------****/
124 //4、选择类型,根据类型向页面中返回题目
125 switch ($type){
126 //可以判断是否已经做过,没做过的话就直接从数据库中取,做过的话就根据id取出做过的题目
127 case 'battle2_random':
128 $question=$modelBattle->battle_entirely_random_question();
129 break;
130 case 'battle2_right':
131 $question=$modelBattle->battle_random_question();
132 break;
133 }
134
135 //5、向页面分配数据
136 $this->assign([
137 'question'=>$question,
138 'questionNum'=>$questionNum,
139 'type'=>$type
140 ]);
141
142
143 }
144 //dump($_POST);die;
145
146
147 /**************************3、向战斗页面分配数据**************************/
148 //1、把博客分类数据传递到页面
149 $blogModel=new Blog();
150 $blogCategorys=$blogModel->getBlogCategory();
151 $this->assign('blogCategorys',$blogCategorys);
152
153 return view();
154 }

12、如何知道当前做了多少个题?

用session肯定是可以的

用类的属性说不定也可以,

我采取的是把数据带到页面去,再从页面带回来,再带过去,以此重复,从而实现数据的持久

13、做题奖励数据怎么呈现到页面?

实现很简单,直接是把数据分配到页面就可以了

14、如何判断数组里面有没有值?

是用count(array)或者array.length来判断,而不是判断if(array)

就是要判断数组的长度

15、如何实现回到上一题?

把所有的访问过的题目都记忆在历史记录数组里面,所以就能够点击回到上一题

16、php脚本变量的注意事项是什么?

php中的脚本变量真的不好用,因为php一旦执行完全,里面的变量就被销毁了

17、抽奖界面如何将获奖物品的物品id传到后台?

用自定义属性获取物品id,用ajax将物品id传到后台

<div class="personal_goods_item" style="border-color:{$lottery_type1_low[$itemNum]['sgr_color']}; " goodsid="{$lottery_type1_low[$itemNum]['sg_id']}">
lottery.prezeGoodsId=$lottery.find(".lottery-unit-"+index).find(".personal_goods_item").attr('goodsid');

二、内容在总结中

legend---六、php脚本变量的生命周期是怎样的的相关教程结束。

《legend---六、php脚本变量的生命周期是怎样的.doc》

下载本文的Word格式文档,以方便收藏与打印。