1、操作符
<?php
//算数运算符
$a=4;
$b=3;
$c=$a/$b;
echo $c."</br>";
/*
echo $c1+$c2,"</br>" ; #8
echo $c1-$c2,"</br>" ; #-2
echo $c1*$c2,"</br>" ; #15
echo $c1/$c2,"</br>" ;#取整数部分 #0.6
echo $c2/$c1,"</br>" ;#取整数部分 #1
echo $c1%$c2,"</br>" ;#取余数部分 #3
*/
//赋值操作符
/*
结合性:
print $value =$a =$b =$c;
可以等价为:
print $value = ($a =($b=$c)); //从右到左结合
*/
$a=5; #5
echo $a."</br>";
$a+=5; #10
echo $a."</br>";
$a-=5; #5
echo $a."</br>";
$a*=5; #25
echo $a."</br>";
$a/=5; #5
echo $a."</br>";
$a.=5; #55,拼接赋值,$a等于$a拼接5
echo $a."</br>";
//自增自减操作符
echo $a++."</br>"; #55
echo $a."</br>"; #56
echo $a--."</br>"; #56
echo $a."</br>"; #55
echo ++$a."</br>"; #56
echo $a."</br>"; #56
echo --$a."</br>"; #55
echo $a."</br>"; #55
//字符串操作符
$s1="hello ";
$s2=$s1."world!";
echo $s2."</br>"; #输出hello world!
//逻辑操作符
$b1=1;
$b2=0;
var_dump ($b1); #此时是int
echo "</br>";
var_dump ($b1 and $b2); #false(结果被转换为bool类型,$b1和$b2仍然是int)
echo "</br>";
var_dump ($b1 && $b2);#逻辑与
echo "</br>";
var_dump ($b1 or $b2); #true
echo "</br>";
var_dump ($b1 || $b2);#逻辑或
echo "</br>";
var_dump (!$b1); #逻辑非 false
echo "</br>";
var_dump ($b1 xor $b2);#异或!!true
echo "</br></br>";
//相等、不等、全等操作符
var_dump ($b1 == $b2);#false
var_dump ($b1 != $b2);#true
**var_dump ($b1 <> $b2); #不等操作符的另一种写法**
echo "</br>";
var_dump ($b1);
var_dump ($b2);
echo "</br>";
var_dump ($b1 === $b2); #全等,类型和值都相等 ,false
var_dump ($b1 !== $b2); #非全等, TRUE
$b2=1;
var_dump ($b1);
var_dump ($b2);
echo "</br>";
var_dump ($b1 === $b2); #更改$b2后为 TRUE
echo "</br></br>";
//比较操作符($b1===$b2=int(1))
var_dump ($b1<$b2); #false
echo "</br>";
var_dump ($b1<=$b2);#true
echo "</br>";
var_dump ($b1>$b2);#false
echo "</br>";
var_dump ($b1>=$b2);#true
echo "</br>";
//条件(三元运算符)
echo ($b1==1)? $b2:-1; #如果$b1等于1,输出$b2;否则输出-1;
echo "</br>";
//位操作符
$w1=2; #二进制0010
$w2=5; #二进制0101
echo ($w1 & $w2); #0 按位与
echo "</br>";
var_dump ($w1 | $w2); #int (7) 按位或
echo "</br>";
var_dump ($w1 ^ $w2); #int (7) 按位异或
echo "</br>";
var_dump (~ $w1 ); #int (-3) 按位非
echo "</br>";
/*解释:
2-> 0000 0010
-> 1111 1101 (取反,得到最终结果的补码)
-> 1111 1100 (补码-1,得到最终结果的反码)
-> 1000 0011 (反码除符号位取反,得到源码,即最终输出结果-3)
*/
var_dump ($w2>>$w1); #int (1)将$w2中的位向右移动$w1次(每一次移动都表示“除以 2”)
echo "</br>";
var_dump ($w1<<2); #int (8) 将$w1中的位向左移动2次(每一次移动都表示“乘以 2”)。
echo "</br>";
?>
2、单引号和双引号的区别
<?php
/*解释:
单引号,内容会与输入的内容一致,(\n不会输出为换行,而是直接输出)
双引号,内容中的变量将会被解析
注意:
\n在浏览器端不能换行,只显示为一个空格,但在源代码显示中可以,浏览器换行要用</br>
*/
echo "w1 is $w1\naaa"."</br>"; # w1 is 2 aaa
echo 'w1 is $w1\n'."</br>"; # w1 is $w1\n
?>
3、PHP流程控制
<?php
//if语句
$a=5;
if($a==4){ #注意双等号!
print "a equals 4"."</br>";
}elseif($a<4){ #注意是elseif!
print "a less than 4"."</br>";
}else{
print "other"."</br>";
}
//switch语句(break)
$category="b";
switch($category){
case "a" :
echo "a";
break ; #记得写break语句
case "b" :
echo "b"."</br>";
break ;
case "c" :
echo "c" ;
break;
}
//while语句(end while)
#第一种写法 12345678910
$i=1;
while($i<=10){
print $i++;
}
echo "</br>";
#第二种写法 234567891011
$i=1;
while($i<=10):
$i++;
echo $i; # echo后面不能输出i++
endwhile;
echo "</br>";
//do_while语句
$i=11;
do{
print $i; #输出11
}while($i<=10); #记得有分号!!!
echo "</br>";
//for循环 12345678910
for($i=1;;$i++){ #第二个表达式为空,死循环
if($i>10){
break ;
}
print $i;
}
echo "</br>";
//foreach循环
/*解释:
foreach结构是一种遍历数组简便方法,仅能用于数组,有两种语法。
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元,因此不需要在 foreach 循环之前调用 reset()。
注意:
foreach 所操作的是指定数组的一个拷贝,而不是该数组本身, foreach 操作后,数组单元的值不受影响。
*/
$arr=array("one","two","three");
foreach($arr as $value){
echo "Value:$value<br>";
}
foreach($arr as $k=>$v){
echo "Value:$v;Key:$k<br>";
}
/*输出:
Value:one
Value:two
Value:three
Value:one;Key:0
Value:two;Key:1
Value:three;Key:2
*/
//break和continue
//continue 在循环结构中,跳过本次循环中剩余的代码并开始执行下一次循环。
?>
4、文件包含
<?php
/*解释:
include()语句在其被调用的位置处包含一个文件,效果与在该语句所在位置复制指定文件的数据相同
以下文档也适用于 require()。这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require()则导致一个致命错误。
换句话说,如果想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的路径。
当一个文件被包括时,其中所包含的代码继承了 include 所在行的变量范围。
*/
//include ‘vars.php’;
?>
5、函数
<?php
$arr = array(0,1,2);
function Return_array(&$arr){
foreach($arr as $k=>$v){
echo "$k=>$v</br>";
}
return $arr[0];
}
$a=Return_array($arr);
echo $a;
?>
6、走近数组
<?php
//二维数组
$arr = array("somearray"=>array(6=>5,13=>9,"a"=>42));
echo $arr["somearray"]['a']."</br>";
//print_r输出数组
print_r($arr);
echo "</br>";
#参数 return可选参数,使得将输出返回给调用者,而不是发送到标准输出。
$str=print_r($arr,true); #希望返回$arr数组的内容到$str数组,故将retrun设置为true
echo $str; #和print_r效果一样
echo "</br>";
//字符串类型 可以下标直接访问
$str = "abcdef";
echo $str[-1]."</br>";
//获取数组长度的函数是 count()
echo count($arr); #输出1
?>
7、创建数组
<?php
//空数组
$arr=array();
//array()函数自动分配键值
$arr=array(1,2,"abc");#自动分配键值0,1,2
print_r ($arr);
echo "</br>";
/*注意:
如果对给出的值没有指定键名,则取当前最大的整数索引值加1.
如果不存在最大的整数索引值,则以0开始作为索引值.
*/
$arr[]="接着"; #继续接着 3,4
$arr[]="next";
print_r ($arr);
echo "</br>";
/*输出:
Array ( [0] => 1 [1] => 2 [2] => abc [3] => 接着 [4] => next )
*/
//array()函数自己分配键值
#调用array()就是创建新的数组了!原先的数据会被覆盖!不是接着了!
$arr=array("set1"=>5,6=>"set2"); #自己分配键值
$arr["next3"]=7; #接着
print_r ($arr);
echo "</br>";
/*注意:
数组的键是唯一的,如果指定的键名已经有了值,则该值会被覆盖.
*/
//range()函数创建
/*解释:
range()建立一个包含指定范围单元的数组
array range(mixed low,mixed high[,number step]);
可选的step参数是单元之间的步进值,默认为 1
*/
$arr=range(0,9);
print_r($arr);
echo "</br>";
/*输出:
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
*/
$arr=range(0,9,3);
print_r($arr);
echo "</br>";
/*输出:
Array ( [0] => 0 [1] => 3 [2] => 6 [3] => 9 )
*/
?>
8、增删数组
<?php
//按下标删除元素 unset()
unset($arr[0]);#删除一个元素,数组的其他索引不变
print_r($arr);
echo "</br>";
//末尾增加元素 array_push()
/*
array_push()函数将variable增加到target_array的末尾,成功时返回TRUE,否则返回FALSE.
可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素).
*/
array_push($arr,"a","b");
print_r($arr);
echo "</br>";
//开头增加元素
/*
array_unshift ( array &$array, mixed $var [, mixed $...] )
将传入的单元插入到array数组的开头.
单元是作为整体被插入的,将保持同样的顺序.
所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变.
函数的返回值是 array 数组新的单元数目.
*/
$length=array_unshift($arr,"first");
print_r($arr);
echo "</br>".$length."</br>";
//末尾删除元素并将其返回 array_pop()
$last=array_pop($arr);
print_r($arr);
echo "</br>".$last."</br>";
//开头删除元素并将其返回 array_shift()
/*
array_shift ( array &$array )将 array 的第一个单元移出并作为结果返回(出列)
array 的长度减一并将所有其它单元向前移动一位.
所有的数字键名将改为从零开始计数,文字键名不变.
如果 array 为空(或者不是数组),则返回 NULL.
使用本函数后会重置数组指针.
*/
$first=array_shift($arr);
print_r($arr);
echo "</br>".$first."</br>";
?>
9、遍历数组
<?php
//for循环结合count()函数遍历,只能遍历数字索引
/*注意:
count ( mixed var [, int mode] )
计算数组中的单元数目或对象中的属性个数,返回 var 中的单元数目,通常是一个 array,任何其它类型都只有一个单元.
如果可选的 mode 参数设为 1,count() 将递归地对数组计数.对计算多维数组的所有单元尤其有用.mode 的默认值是 0
*/
for($i=0;$i<count($arr);$i++){
echo "第",$i,"个元素是:",$arr[$i],"</br>";
}
//current()和next()组合使用
/*
current( )
语法形式:mixed current (array target_array)函数返回target_array 数组当前指针位置的数组值。
如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
next ()
语法形式:mixed next (arrary input_array)
next( )函数返回input_array 中紧接这放在当前数组指针的下一个位置的数组值。
current ( )与next ()函数不同,current ( )不移动指针,而next ( )函数需要移动指针。
*/
while($value=current($arr)){
echo $value,"</br>";
echo next($arr),"</br>";
}
//each() 和 list()联合起来遍历数组
list($a,$b,$c,$d)=$arr; # list()把数组中的值赋给一些变量
echo $a,$b,$c,$d,"</br>";
reset($arr); #reset()函数把指针挪到数组开始.用each()前记得用!!
$each=each($arr);
var_dump($each); #也能输出数组
echo "</br>";
print_r($each); # each()函数返回当前键值对组成的一个长度为四的数组
echo "</br>";
reset($arr); # 用each()从头遍历前记得用!!
while(list($key,$val)=each($arr)){
echo "$key=>$val<br>";
}
echo "</br>";
//foreach()遍历数组
foreach($arr as $key =>$value){
echo $key."=>".$value."</br>";
}
?>