项目中在前端遇到的php知识
PHP isset()函数
{if condition="isset($_GET['orderby']) && $_GET['orderby']== 'panjueshijian_timestamp|desc'"}
<div class=" span"><a href="javascript:;" data-url='/cases/list.html' tid="orderBy" key="doclevel">默认排序1<i class="iconfont icon-jiangxu"></i></a></div>
<div class="desc span"><a href="javascript:;" data-url='/cases/list.html' tid="orderBy" key="panjueshijian_timestamp">裁判日期1<i class="iconfont icon-jiangxu"></i></a></div>
{else}
<div class=" span"><a href="javascript:;" data-url='/cases/list.html' tid="orderBy" key="doclevel">默认排序2<i class="iconfont icon-jiangxu"></i></a></div>
<div class="desc span"><a href="javascript:;" data-url='/cases/list.html' tid="orderBy" key="panjueshijian_timestamp">裁判日期2<i class="iconfont icon-jiangxu"></i></a></div>
{/if}
isset() — 检测变量是否设置。
上面代码中的条件含义为:如果条件get方法的参数包含‘oderby',并且oderby的参数值为‘panjueshijian_timestamp|desc’展示前两个div;否则展示后两个div。有点类似于vue中的v-if,v-else的条件判断,写法不同。
Volist标签
<!-- 相关专题数据 -->
<div class="zhuanti">
<ul>
{if condition="isset($vo.special) && isset($vo.special.special) && count($vo.special.special) > 0 "}
{volist name="vo.special" id="zt"}
{volist name="zt" id="zts"}
{if condition="$vipinfo.user_level eq 0"}
<li><h3 class="report_tit" title="{$zts.title}"><a href="javascript:void(0)" onclick="tips()">{$zts.title}</a></h3></li>
{else /}
<li><h3 class="report_tit" title="{$zts.title}"><a href="/special/{:encode($zts['id'],13)}.html" target="_blank">{$zts.title}</a></h3><a href="/special/{:encode($zts['id'],13)}.html" class="report_btn" target="_blank">点击查看</a></li>
{/if}
{/volist}
{/volist}
{/if}
</ul>
</div>
Volist标签 — 主要用于在模板中循环输出数据集或者多维数组。
在控制器中首先对模版赋值:
$User = M('User');
$list = $User->limit(10)->select();
从2.1版开始允许在模板中直接使用函数设定数据集,而不需要在控制器中给模板变量赋值传入数据集变量,如:$this->assign('list',$list);
name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。
id表示当前的循环变量,可以随意指定,但确保不要和name属性冲突,
例如:
<volist name="list" id="data">
{$data.id}
{$data.name}
</volist>
感觉类似于vue中的遍历
v-for = " (item,index) in list :key = index "
{ { item.id }}
{ { item.name }}
(1)支持输出部分数据,例如输出其中的第5~15条记录
<volist name="list" id="vo" offset="5" length='10'>
{$vo.name}
</volist>
解析:offset从第5条数据开始,长度为10。
(2)支持输出偶数记录
<volist name="list" id="vo" mod="2" >
<eq name="mod" value="1">{$vo.name}</eq>
</volist>
解析:mod从0开始计数,这里mod循环计数为0,1
(3)支持Mod属性还用于控制一定记录的换行
<volist name="list" id="vo" mod="5" >
{$vo.name}
<eq name="mod" value="4"><br/></eq>
</volist>
解析:mod循环计数,0,1,2,3,4 value定义当值为4的时候换行,mod定义数据长度五条
(4)没有指定key属性的话,默认使用循环变量i
<volist name="list" id="vo" >
{$i}.{$vo.name}
</volist>
制定key属性的话,使用循环变量k
<volist name="list" id="vo" key="k" >
{$k}.{$vo.name}
</volist>
(5)(这个不太明白)从2.1版开始允许在模板中直接使用函数设定数据集,而不需要在控制器中给模板变量赋值传入数据集变量,如:
<volist name=":fun('arg')" id="vo">{$vo.name}</volist>
(6)在volist循环里面,如果嵌入php代码,输出变量
<select>
<volist name="goods" id="vo">
<option value="{$vo.goods_name}" <?php echo ($goods_name == $vo['goods_name'])?"selected":"" ?> >{$key}.{$vo.goods_name}</option>
</volist>
</select>
在下拉列表里面,根据后台提供的数据,动态的添加option选项。在里面,用php代码,实现select动态显示option的值,而在php代码块中,使用volist的变量,则要使用$vo[‘goods_name’]
系统学习
php语法
<?php " hello world ;" ?>
通过PHP,有两种在浏览器输出文本的基础指令:echo , print
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
<?php echo " hello world ;"?>
php变量
定义在函数外部的就是全局变量(global),它的作用域从定义处一直到文件结尾。
<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
输出:
测试函数内变量:变量 x 为: 变量 y 为: 10
测试函数外变量:变量 x 为: 5 变量 y 为:
定义在函数内部的就是局部变量(local),它的作用域为函数定义范围内。仅能在函数内部访问。
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
<?php
function test()
{
$a = 15;
echo "内部输出结果:" . $a;
}
echo "外部输出结果:" . $a; // 无法访问变量 a
echo PHP_EOL;
test();
?>
//输出结果:外部输出结果:'' 内部输出结果:15
函数之间存在作用域互不影响。
函数内访问全局变量需要global关键字或者使用$GLOBALS[index]数组
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;//输出15;
?>
(1)在php中函数是有独立的作用域,所以局部变量会覆盖全部变量,即使局部变量中没有全部变量相同的变量,也会被覆盖。
<?php
$a = 5;
$b = 3;
function t( ){
echo $a - $b;
}
t( ); // 输出0
?>
Static 作用域
当一个函数完成时,它的所有变量通常会被删除。然而,有时候希望某个局部变量不要被删除。
要做到这一点,需在第一次声明变量是使用static关键字
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();//输出0
myTest();//输出1
myTest();//输出2
?>
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。
参数作用域
参数是通过调用代码将值传递给函数的局部变量。参数是在参数列表中声明的,作为函数声明的一部分:
<?php
function myTest($x)
{
echo $x;
}
myTest(5);
?>