legend---六、php脚本变量的生命周期是怎样的
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">更多 »</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> </p>
10 $pattern='/<p> <\/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脚本变量的生命周期是怎样的的更多相关文章
- PHP变量的生命周期
变量不仅有其特定的作用范围,还有其存活的周期--生命周期.变量的生命周期指的是变量可被使用的一个时间段,在这个时间段内变量是有效的,一旦超出这个时间段变量就会失效,我们就不能够再访问到该变量的值了. ...
- [转]Android静态变量的生命周期
原文地址:https://my.oschina.net/jerikc/blog/137207 Android是用Java开发,其静态变量的生命周期遵守Java的设计.我们知道静态变量是在类被load的 ...
- 内存分配、C++变量的生命周期和作用域
1.内存分配 程序的内存分配有以下几个区域:堆区.栈区.全局区.程序代码区,另外还有文字常量区. 栈区 ——存放局部变量,即由auto修饰的变量,一般auto省略.由编译器自动分配释放.局部变量定义在 ...
- C++临时变量的生命周期
C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string(" ...
- 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期
http://www.cnblogs.com/chutianyao/p/3246592.html 项目中要使用xml打包.解析协议,HQ指定了使用rapidxml--号称是最快的xml解析器. 功能很 ...
- android中少用静态变量(android静态变量static生命周期)
在android中,要少用静态变量. 我现在做的一个应用中,之前的开发人员使用静态变量来存储cookie,这个全局的静态变量用来验证身份. 这时客户反应,应用长时间不使用,再次使用,会提示身份过期. ...
- [转] C++临时变量的生命周期
http://www.cnblogs.com/catch/p/3251937.html C++中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量. 主要的用途主要有两类: 1) 函数的 ...
- 【转载】ASP.NET线程安全与静态变量的生命周期浅谈
ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期: void Application_Start开始 void Application_E ...
- 配置Session变量的生命周期
在Web.config文件中配置Session变量的生命周期是在<sessionState></sessionState>节中完成的,在配置Session的生命周期时,可以设置 ...
随机推荐
- Laravel修炼:服务容器绑定与解析
前言 老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头皮看下去(虽然到现在我还有很多 ...
- pandas 7 合并 merge 水平合并,数据会变宽
pd.merge( df1, df2, on=['key1', 'key2'], left_index=True, right_index=True, how=['left', 'right', 'o ...
- 【BZOJ 1269】 [AHOI2006]文本编辑器editor
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] /* [move k] 指令.直接 把pos改成k.表示改变光标位置 [insert n s],在pos后面插入一个长度为n的字符串 ...
- JavaIO 总结-装饰者模式
另外参考文章:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/ 一. File类 file.createNewFile();file.del ...
- vps上运行serv-u的问题
为了给产品环境建个测试站,今天特意申请一个vps来做开发用,但运行了Serv-U的ServUDaemon.exe后始终提示: 响应: 530 User czhan cannot log in. 很无语 ...
- V$ASM_OPERATION
- poj2280--Amphiphilic Carbon Molecules(扫描线+极角排序+转换坐标)
题目链接:id=2280">点击打开链接 题目大意:给出n个点的坐标.每一个点有一个值0或者1,如今有一个隔板(无限长)去分开着n个点,一側统计0的个数,一側统计1的个数,假设点在板上 ...
- bzoj1430: 小猴打架(prufer序列)
1430: 小猴打架 题目:传送门 简要题意: n只互不相识的猴子打架,打架之后就两两之间连边(表示已经相互认识),只有不认识(朋友的朋友都是朋友)的两只猴子才会打架.最后所有的猴子都会连成一棵树,也 ...
- Android JNI和NDK学习(09)--JNI实例二 传递类对象
1 应用层代码 NdkParam.java是JNI函数的调用类,它的代码如下: package com.skywang.ndk; import android.app.Activity; impo ...
- Android RecyclerView 水平滚动+自动循环轮播
主要处理的地方: 1.RecyclerView中Adapter的item个人可以无限轮询. 2.RecyclerView自动滑动 3.手指按下时滑动停止,手指抬起后继续自动滑动 public clas ...