第二章:语法基础
一、语法基础
1.数据类型
1)类型转换
方法一: //不改变原操作数的类型
(int)$x; //或 (integer)$x;
(real)$x; //或 (double)$x; 或 (float)$x;
(string)$x;
(array)$x;
(object)$x;
方法二: //不改变原操作数的类型
Doubleval($x); //将参数视为双精度数
Intval($x); //将参数视为整型数
Strval($x): //将参数视为字符串型
方法三: //改变原操作数的类型
$x=1.5;
settype($x,”integer”); //$x=1
参数值:integer double string array object
2).取得操作数类型
方法一:
$x=1;
gettype($x); //integer
方法二:
is_long is_double is_string is_array is_object
2.字符串
1).转义字符
n 换行符
r 回车
r 横表
反斜线
$ 货币符号
“ 双引号
2).使用ASCCII码
ACSII码相关函数
函数
|
说明
|
chr(n)
|
返回ASCII码为n的字符
|
dechex(n)
|
返回等于给定十进制值n的十六进制值
|
decoct(n)
|
返回等于给定十进制n的八进制值
|
hexdec(n)
|
返回等于给定十六进制值n的十进制值
|
octdec(n)
|
返回等于给定八进制值n的十进制值
|
ord(c)
|
返回字符c的ASCII码
|
例:打印ASCII码为32-127的字符的十进制、八进制、和十六进制值
for($i=32;$i<128;$i++)
{
$c=chr($i);
$octal=decoct($i);
$hex=dechex($i);
echo =”
$i(octal $octal,hex $hex):$c”;
}
3).单引号字符串
注:
[1].在单引号字符串中,惟一允许的转义序列是和 ‘
[2].在输出单引号字符串时,不会执行变量替换
4) printf(“the value of n is:%d”,$n);
$result=sprintf(“the value of n is:%d”,$n);
5).number_format()
格式: number_format(number);
number_format(number,decimals);
number_format(number,decimals,dec_point,thousands_sep);
参数:
number:指定想要格式化的数值
decimals:指定期望的小数位数
thousands_sep:指定用作千位分隔符的字符
默认:
格式化后的结果没有小数
在任何小数位之前插入一个点(。)
用逗号做为千位分隔符
6).处理字符串
[1]. 获得中字符串的长度 strlen(STRING)
如:
$mystr=”xcvfwfwef”;
$mylen=strlen($mystr);
[2].去掉字符串中的空白字符(空白字符:空格、制表符、换行符等 )
函数
|
说明
|
chop(s)
|
返回从右边去掉了空白的s的值,与rtrim(s)相同
|
ltrim(s)
|
返回从左边去掉了空白的s的值
|
rtrim(s)
|
返回从右边去掉了空白的s的值,与chop(s)相同
|
trim(s)
|
返回从两端去掉了空白的s的值
|
[3].大小写转换函数
strtoupper()返回全部转换为大写的参数值
strtolower()返回全部转换为小写的参数值
[4].比较字符串
函数
|
说明
|
strcasecmp(s1,s2)
|
执行不区分大小写比较,如果s1小于s2,则返回小于0的值,如果s1大于s2,则返回大于0的值,否则返回0
|
strcmp(s1,s2)
|
执行区分大小写比较,如果s1小于s2,则返回小于0的值,如果s1大于s2,则返回大于0的值,否则返回0
|
strncasecmp(s1,s2,n)
|
执行不区分大小写比较,如果s1小于s2,则返回小于0的值,如果s1大于s2,则返回大于0的值,否则返回0,大比较中最多包括n个字符
|
strncmp(s1,s2,n)
|
执行区分大小写比较,如果s1小于s2,则返回小于0的值,如果s1大于s2,则返回大于0的值,否则返回0,大比较中最多包括n个字符
|
[5].查找和提取子串
函数
|
说明
|
strchr(s1,s2)
|
返回s1中从s2的第一次出现到最后的部分。如果没有发现s2,那么返回fasle,stristr执行相同的操作
|
stristr(s1,s2)
|
返回s1中从s2的第一次出现到最后的部分。如果没有发现s2,那么返回fasle,比较时不考虑大小写
|
strpos(s1,s2)
|
返回s1中s2的第一次出现的整数位置,如果没有发现s2返回false
|
strrchr(s1,s2)
|
返回s1中从s2的最后一次出现到最后的部分,如果没有发现s2,返回false,比较中只使用s2的第一个字符
|
strstr(s1,s2)
|
返回s1中从s2的第一次出现到最后的部分,如果没有发现s2,返回false,strchr执行相同的操作
|
substr(s,start)
substr(s,start,len)
|
返回s中由一个整数索引start或两个索引start及len指定的部分,字符串的第一个位置是位置0
|
[6].替换子串
函数
|
说明
|
str_replace(search,replace,subject)
|
搜索subject中的子串search,如果找到子串,使用replace替换第一次出现的search,然后返回subject的值
|
substr_replace(subject,replace,start,len)
|
使用replace替换在start开始、长度为len的子串,然后返回subject的值
|
3.常量
[1].PHP预定义常量
__FILE__; //指定当前文件物理路径(包括文件名)
__LINE__; //指定当前脚本所在的行数
PHP_VERSION; //指定PHP程序的版本
PHP_OS; //指定PHP解释器的操作系统名称
TRUE; //该常量的值为true
FALSE; //该常量的值为false
E_ERROR; //指到最近的错误处
E_WARNING; //指到最近的警告处
E_PARSE; //剖析语法有潜在问题的地方
E_NOTICE; //发生不正常现象但不一定是错误的地方,如存取一个不存在的变量
例:
echo __LINE__;
echo __FILE__;
echo PHP_VERSION;
echo PHP_OS;
echo __LINE__;
?>
[2].用户定义常量
1).常量的定义
如:define(“CL_PI”,3.14159);
2).常量的引用
echo CL_PI; //无须$
3).常量的测试
echo defined(“CL_PI”); //如果已经定义了,返回1,否则返回0
4).π常量(精确到14位有效数字)
echo pi();
4.变量
注:
1).PHP变量无需预先声明
2).无需类型定义
3).不允许未赋值就使用
例:
$b=1;
$a=true;
//$a=$b
[1].声明变量
(1).全局变量:global $mystr
(2).静态变量:static $mystr2 //一般用于子程序循环中,使得循环结束,其变量仍然存在
(3).动态变量:如:
$name=”cbw”;
$$name=111; //$cbw=111;
${$name.”_1”}=222; //$cbw_1=222;
(4).标量变量
$xx=”xx”
[2].判断变量是否已配置
isset($mystr); //如果已配置则返回 true
[3].删除变量
unset($mystr);
5.运算符
1).算术运算符
+、—、*、/、%、++、--
例:
$a=4;
$b=2;
/*
$a+$b=6
$a-$b=2
$a*$b=8
$a/$b=2
$a%$b=0 //取余
*/
例:
$a=5;
$a++;
//$a=6
$a--;
//$a=5
2).赋值运算符
=
例:
$a=4;
$b=$a;
//$b=4
3).比较运算符
= = 相等
= = = 相等且类型相同
!= 不等
!= = 不等或类型不同
<
>
<=
>=
4). 逻辑运算
&&
|
而且 (And)
|
and
|
而且 (And)
|
||
|
或者 (Or)
|
or
|
或者 (Or)
|
xor
|
异或 (Xor)
|
!
|
不 (Not)
|
5).拼接字符串运算符
.
例:
$str_string1=”这是”;
$str_string2=”一个PHP程序”;
$str_string3=$str_string1 . $str_string2;
//$str_sring3=”这是一个PHP程序”
6).其它运算符
$
|
变量
|
&
|
变量的地址 (加在变量前)
|
@
|
不显示错误信息 (加在函数前)
|
->
|
类的方法或者属性
|
=>
|
数组的元素值
|
? :
|
三元运算子
|
6.数组
1).数字数组(传统数组:数组项的下标是数组序列)
[1].使用赋值语句
例:
$x[]=”cbw”; //$x[0]=”cbw”
$x[]=”lj”; //$x[1]=”lj”
例:
$x[1]=”cbw” //$x[1]=”cbw”
$x[2]=”lj” //$x[2]=”lj”
$x[]=”q” //$x[3]=”q”
例:
$x[10]=”cbw” //$x[10]=”cbw”
$x[32]=”lj” //$x[32]=”lj”
$x[]=”q” //$x[33]=”q”
[2].使用array 创建:
例:
$a=array(1,2,3,4);
// $a[0]=1
// $a[1]=2
// $a[2]=3
// $a[3]=4
例:
$x=array(“c”,”b”,”w”); //$x[0]=”c” $x[1]=”b” $x[2]=”w”
例:
$x=array(10=>”c”,”b”,”w”); //x[10]=”c” $x[11]=”b” $x[12]=”w”
2).关联数组(数组项的下标是命名关键字)
[1].使用赋值语句
例:
$x[“c”]=”cbw” //$x[“c”]=”cbw”
$x[“l”]=”lj” //$x[“l”]=”lj”
$x[“q”]=”q” //$x[“q”]=”q”
[2].使用array 创建:
例:
$b=array(“name”=>”cbw”,”sex”=>”男”);
//$b[“name”]=”cbw”
//$b[“sex”]=”男”
3).处理数组
①.返回数组长度:
sizeof($myarray) //返回数组 $myarray 的长度
count($x) //返回数组 $x 的元素数量
②.遍历数组元素:
A.
顺序数组: for($i=1;$i<22;$i++)循环
B.
非顺序数组(也可用于顺序数组的遍历):
[1].while循环
例1:
reset ($arr); //将数组的指针指到数组第一个元素
//list:列出数组中元素的值 each:返回数组中下一个元素的索引及值
vhile (list(,$value)=each($arr)){
echo "Value:$value
n";
}
等价于:
foreach ($arr as $value){
ecno "value: $value
n";
}
例2
reset ($arr);
while (list($key,$value) = each ($arr)){
echo "Key:$key; Value:$value
n";
}
等价于:
foreach {$arr as $key => $value){
echo "Key:$key; Value:$value
n";
}
[1]. foreach($myarray as $key=>$string) 循环
或 foreach($myarray as $string)
参数: $myarray:目标数组
$key :数组索引变量(自动分配)
$string :数组元素值(自动分配)
例:
$myarray=array (“name”=>”cbw”,”sex”=>”男”,”age”=>”22”);
foreach($myarray as $temp_str){
echo $temp_str; //输出所有元素
}
输出:
cbw男22
[2].使用列举函数:current/next()/prev()/key()
例:
$myarray=array("name"=>"cbw","sex"=>"男","age"=>"22");
$mycurrent=current($myarray);
echo key($myarray)."=>".$mycurrent.”
”;
$mynext=next($myarray);
echo key($myarray)."=>".$mynext.”
”;
$mynext=next($myarray);
echo key($myarray)."=>".$mynext.”
”;
$myprev=prev($myarray);
echo key($myarray)."=>".$myprev.”
”;
输出:
name=>cbw
sex=>男
age=>22
sex=>
男
[3].each()函数
例:
$myarray=array("name"=>"cbw","sex"=>"男","age"=>"22");
$myeach=each($myarray);
echo $each[0].”
”;
echo $each[1].”
”;
echo $each[“key”].”
”;
echo $each[“value”].”
”;
$myeach=each($myarray);
echo $myeach[0]."
";
echo $myeach[1]."
";
$myeach=each($myarray);
echo $myeach[0]."
";
echo $myeach[1]."
";
输出:
name
cbw
name
cbw
sex
男
age
22
[4].list()/each()/next()/prev()
$myarray=array("name"=>"cbw","sex"=>"男","age"=>"22");
list($key,$value)=each($myarray);
echo "$key=>$value
";
list($key,$value)=each($myarray);
echo "$key=>$value
";
list($key,$value)=each($myarray);
echo "$key=>$value
";
输出:
name=>cbw
sex=>男
age=>22
③.循环取得数组变量值的键值
$myarray=array (“name”=>”cbw”,”sex”=>”男”,”age”=>”22”);
foreach ($array as $temp_key =>$temp_str){
echo “$temp_key=>$temp_str”;
}
④.数组的排序
sort()/asort()/rsort()/Arsort()/ksort()/Krsort()
例:
$myarray=array(10=>”Perl”,20=>”PHP”,21=>”Python”);
sort($myarray);
输出:
0=>PHP
1=>Perl
2=>Python
注:大写字母排在小写字母的前面
排序函数总结
操作
|
函数
|
结果
|
按值对数组排序
|
aort()
|
0=>PHP
1=>Perl
2=>Python
|
按值对关联数组排序
|
asort()
|
20=>PHP
10=>Perl
21=>Python
|
按值的降序对数组排序
|
arsort()
|
21=>Python
10=>Perl
20=>PHP
|
按标识符对数组或关联数组排序
|
ksort()
|
10=>Perl
20=>PHP
21=>Python
|
按标识符的降序对数组或关联数组排序
|
krsort()
|
21=>Python
20=>PHP
10=>Perl
|
7.函数(用户自定义函数)
1).访问函数外的值
$a=1;
function fun_temp($x){
$x=$a; //不能访问
$x=$GLOBALS[“a”]; //可以访问
Global $a; //也可以访问
$a=2;
}
2).参数的默认值
function fun_temp($x=”默认值”){
echo $x;
}
3).按值传递
例:
//创建:
function fun_temp($x){
$x=1;
}
//调用:
$y=0;
fun_temp($y);
echo &y;
输出:
0
4).按引用传递参数
例:
//创建:
function fun_temp(&$x){
$x=1;
}
//调用:
$y=0;
fun_temp($y);
echo &y;
输出:
1
或例:
//创建:
function fun_temp($x){
$x=1;
}
//调用:
$y=0;
fun_temp(&$y);
echo &y;
输出:
1
5).返回值
[1].普通返回值
例:
function square($num){
return $num*$num;
}
引用:
echo square(4);
[2].返回数组
例:
function small(){
return myarray(0,1,2);
}
引用:
list($zero,$one,$two)=small();
[3]返回指针
例:
function &reference(){
return $some;
}
引用:
$newref=&reference();
6).变量函数
//定义foo()函数
functlon foo(){
//定义bar()函数
functlon bar($arg = ''){
echo "In bar();argument was '$arg'.
n";
}
$func = 'foo';
$func(); //使用变量调用函数foo()
$func='bar';
$func('test'); //使用变量调用函数bar()
?>
8.分支控制语句
1).if/then语句
方法一:
$a=5;
$b=”4”;
if($a>$b){ //在处理表达式时,系统会自动的把 $b 转变成整形
echo “a>b”;
}elseif($a=$b){ //可以只有if语句部分
echo “a=b”;
}else{
echo “a
}
方法二:
$a=5;
$b=4;
if($a>$b):
print “a>b”;
elseif ($a=$b) :
print “a=b”;
else:
print “a
endif;
2).switch语句
方法一:
$a=”100”;
switch($a){
case(10):
echo “$a=10”;
break;
case(100):
echo “$a=100”;
default:
echo “$a=?”;
}
方法二:
$a=”100”;
switch($a):
case(10):
echo “$a=10”;
break;
case(100):
echo “$a=100”;
default:
echo “$a=?”;
endswitch;
3).for循环
方法一:
for($i=1;$i<10;$i++){
echo $i; //或者:print $i;
}
方法二:
for($i=1;$i<10;$i++):
echo $i; //或者:print $i;
endfor;
4).foreach循环
5).while循环
方法一:
while(条件){
语句;
/*
if(条件){
语句;
}else{
continue;
}
*/
}
方法二:
while(条件):
语句;
endwhile
;
6).do while循环
do(条件){
语句;
}while(条件);
注:
break用于跳出循环体
continue用于跳出本次循环,继续下一次循环的判断
二、类
1.类的创建与引用
创建
class book {
var $first;
var $last;
var $number;
function set_name($first,$last){
$this->firt=$first; //把传递过来的$first变量赋给该类的$first变量成员,下同
$this->last=$last;
}
function set_number($number){
$this->number=$number;
}
function printf(){
echo 'Name:'.$this->first. ' ' . $this->last . '
';
echo 'Number:'.$this->number; //也可以使用return 返回值,
}
}
$entry=new book (); //创建类实体 () 可加也可不加
$entry->set_name('Jane','Smith');
$entry->set_number('555');
$entry-> printf();
?>
输出:
Name:
Smith
Number:555
2.构造函数
class users{
var $first;
var $last;
var $number;
var $i=10;
function users ($first,$last,$number){ //构造函数名和类名相同
$this->first=$first;
$this->last=$last;
$this->number=$number;
}
function sum(){
return $this->i;
}
function printf(){
echo 'Name:'.$this->first.' '.$this->last.'
';
echo 'Number:'.$this->number;
}
}
$entry=new users('崔','北为','100'); //创建类实体
$entry->printf ();
?>
3.类的继承
class users2 extends users{ //users2为子类或派生类,users为基类或父类
var $email;
function users2 ($first,$last,$number,$email){ //构造函数名和类名相同
$this->email=$email;
$this->first=$first;
$this->last=$last;
$this->number=$number;
}
function printf2(){
echo 'Name:'.$this->first.' '.$this->last.'
';
echo 'Number:'.$this->number.'
';
echo 'Email:'.$this->email;
}
}
$entry-> printf2 ();
?>
4.重载方法
class users3 extends users{ //users2为子类或派生类,users为基类或父类
var $email;
function users3 ($first,$last,$number,$email){ //构造函数名和类名相同
$this->email=$email;
$this->first=$first;
$this->last=$last;
$this->number=$number;
}
function printf (){ //重载父类的printf方法
echo 'Name:'.$this->first.' '.$this->last.'
';
echo 'Number:'.$this->number.'
';
echo 'Email:'.$this->email;
}
}
$entry-> printf ();
?>
5.调用父类的方法
class users4 extends users{ //users2为子类或派生类,users为基类或父类
var $email;
var $j=1;
function users4 ($first,$last,$number,$email){ //构造函数名和类名相同
$this->email=$email;
$this->first=$first;
$this->last=$last;
$this->number=$number;
}
function printf (){ //重载父类的printf()方法
echo 'Name:'.$this->first.' '.$this->last.'
';
echo 'Number:'.$this->number.'
';
echo 'Email:'.$this->email;
}
function sum(){ //重载父类的sum()方法
echo '
';
echo 'Sum='.(users::sum()+$this->j); //调用父类的sum()方法的返回值(二个冒号)
}
}
$entry-> printf ();
$entry-> sum();