您的位置:首页 > 编程语言 > PHP开发

php基础知识

2015-07-29 12:21 696 查看
1、php嵌套模式

<?php...?><?...?><%...%><scriptlanguage="php">...</script><?=$hello?>


2、php注释

//或/*...*/或#


3、变量

1、命名规则:(1)不能以数字开头;(2)不能使用运算符+-*/;(3)可以使用关键字;(4)区分大小写;(5)变量名称一定要有意义。$aaaBbbCcc

2、$$four//可变变量,很少用

3、变量的引用赋值:$two=&$one

4、变量的类型:int,bool,float(double,real),string;array,object;resource,null

5、var_dump()//检验变量类型

6、变量的声明

$int=10;//十进制声明

$int=045;//0开头是8进制

$int=0xff;//0x开头是16进制

$float=3.14E2//3.14乘以10的二次方

$str=<<<one

……

one;//定界符声明字符串

$str=`abc`;//反引号声明的字符串

7、数据类型的强制转换:

setType($aa,int)//强制转换成整型

intval($aa);//强制转换成整型

floatval($aa);//强制转换成浮点型

stringval($aa);//强制转换成字符串

8、声明类型的变量:$a=(int)”123abc”;

9、与变量有关的函数:

isset()//判断变量是否存在

empty()//判断变量是否为空

unset()//删除变量

setType()//变量类型转换

getType()//获取变量类型

is_bool()

is_int(),is_integer(),is_long()

is_string()

is_float(),is_double(),is_real()

is_array()

is_object()

is_resource()

is_null()

is_scalar()//判断是否为标量(int,float,bool,string)

is_numberic()//判断是否是数字

is_callable()//判断是否为有效的函数名


4、常量

define("HOME","aaa");//其值只能是标量类型(int,string,bool,float)

defined("HOME");//判断常量是否存在,注意是defined,多个d

M_PI//3.14……

__FILE__//当前文件名

__LINE__//当前行

__FUNCTION__//当前函数名

__PHP__VERSION//php


5、php运算符与表达式

1、$a++,++$a,$a—,—$a的区别

2、逻辑运算符&&和||的短路问题

3、反引号:$str=`ipconfig/all`;//执行shell命令,并返回结果


6、php流程控制

1、如果判断范围用if……else……,如果单个值匹配用switch……case……

2、for,while循环;


7、php常用函数

/*时间函数*/
echo'<h4style="color:#f00">时间函数</h4>';
echotime().'<br/>';//当前时间unix时间戳
echodate("Y:m:dH:i:s").'<br/>';//当前格式化时间

/*字符串函数*/
echo'<h4style="color:#f00">字符串函数</h4>';
$word="abcdef";
echostrlen($word).'<br/>';//获取字符串长度空格也算
echoimplode("-",array(1,2,3,4)).'<br/>';//数组转换成字符串,用“-”连接
print_r(explode("-","1-2-3-4"));//字符串转换成数组以“-”分割
echo'<br/>';
echoltrim($word,'b').'<br/>';//剔除左边空格
echortrim($word,'b').'<br/>';//剔除右边空格
echotrim($word,'b').'<br/>';//剔除两边空格
echosubstr($word,0,3).'<br/>';//ab截取字符串若第二个参数为负数,则从倒数第几个开始取,但是截取规则还是从左到右
echostr_replace("b","_",$word).'<br/>';//查找与替换字符串
echostrtoupper($word).'<br/>';//小写转大写
echostrtolower('ABCDEF').'<br/>';//大写转小写
echoucfirst('abc').'<br/>';//首字母转大写,只操作首字母
echohtmlentities('<br/> ').'<br/>';//打印标签
echosubstr_count('abcdagca','a').'<br/>';//返回第二个字符串在第一个字符串中出现的次数
echostrpos('abcdagca','a').'<br/>';//查找a在第一个字符串中第一次出现的位置,第一个位置为0
echostrrpos('abcdagca','a').'<br/>';//查找a在第一个字符串中最后一次出现的位置,第一个位置为0
echostrstr('sddabdsabg','ab').'<br/>';//截取ab以后的字符串(包括ab)
echostrrchr('sdfabkjkabsdf','ab').'<br/>';//截取最后一个ab以后的字符串(包括ab)
echoaddcslashes("abcdefghijklman","akd").'<br/>';//查找字符串中akd,并且在前面加上\
echostr_pad('abc',10,'a',0).'<br/>';//字符串填充函数:把字符串abc左填充a到10位,0:左填充;1:右填充;2:两边填充默认左填充
echostrcmp('b','c').'<br/>';//字符串比较函数:阿克斯码值,返回10-1
echonumber_format(1235.3254,2,":",";").'<br/>';//格式化数字函数:2:保留两位小数,四舍五入::小数点用冒号表示,;:三位分隔符


8、php数组

1、数组的遍历


for($i=0;$i<count($arr);$i++){
echo"\$user[{$i}]=".$arr[$i]."<br>";
}


foreach($arras$key=>$val){
echo$key."=========>".$val."<br>";
}


while($arr=each($user)){//$user是一个数组
echo$arr["key"]."---->".$arr["value"]."<br>";
}


//list接收数组元素
list($name,$age,$sex)=array("zansan",10,"nnnnn");


2、数组的处理函数


/*常用数组函数*/更多详情http://www.shouce.ren/api/view/a/3635count($arr);//返回数组元素的个数或sizeof()

array_count_values($arr);//所有元素出现的个数返回数组

array_unique(array(0,1,2,1,2,3));//删除数组中重复元素,键值不重排,即键值不变
in_array('b',$arr);//判断b是否在数组中返回1或0
array_keys($arr);//返回数组里面的key组成新的索引数组
array_key_exists('k1',$arr);//判断k1这个键是否在数组里返回1或0
array_values($arr);//把数组转换成索引数组,键值从0开始
key($arr);//返回当前指针所指向的键值k0
current($arr);//返回当前指针所指向的元素值a
each($arr)//当前指针所指向的元素和键值组成新的数组,并且指针下移next($arr);//指针下移,然后返回该指针元素值
prev($arr);//指针上移,然后返回该指针元素值
reset($arr);//指针重置,然后返回该指针的元素值a
end($arr);//指针移到最后,然后返回该指针的元素值c
array_push($arr,'d','e');//把d和e作为元素追加到$arr数组里,键值为索引最小数返回值为数组长度5
array_unshift($arr,'t1','t2');//把t1、t2...作为元素插入到数组的前面,键值从0开始,后面的索引键值依次增加,关联键值不便,元素顺序不变返回值为数组长度
array_pop($arr);//删除数组中的最后一个元素,返回值为最后一个元素
array_shift($arr);//删除数组中的第一个元素,返回值为第一个元素
array_pad($arr,10,"t10");//数组用‘t10’作为元素添加到10个,键值自动累计
sort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码排序
rsort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码倒叙排序
array_combine(array('a','b','c','d','e'),$arr);//改变数组的键值,元素个数必须一致
array_merge($arr,array('a','b','c'));//合并数组
array_slice($arr,2,1);//截取数组,从第3个开始取1个
array_splice($arr,2,1);//截取出来的数组然后删除原数组已经改变
json_encode($arr);//把数组转换成json格式

array_flip($arr);//数组元素顺序反过来显示

array_reverse($arr);//键值互换

func_get_args()//获取函数的参数组成一个数组
func_num_args()//统计函数参数的个数
array_filter(arrar(),fun)//用回调函数过滤数组中的元素…

array_walk(arrar(),fun)//数组中每个成员应用用户函数

array_map(fun,arrar())//将回调函数作用到给定数组的单元上


3、数组的排序(一维数组)


/**
  *sort按数组的value升序排序
  *@Tipskeyfrom0,1...键重新排,原有数组被改变
  *@returnBoolean1or0
    **/
$cars=array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB");
sort($cars);
print_r($cars);//Array([0]=>BMW[1]=>SAAB[2]=>Volvo)

/**
*rsort按数组的value降序排序
*@Tipskeyfrom0,1...键重新排,原有数组被改变
*@returnBoolean1or0
**/
$cars=array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB");
rsort($cars);
print_r($cars);//Array([0]=>Volvo[1]=>SAAB[2]=>BMW)

/**
*asort按数组的value升序排序
*@Tips键不变,原有数组被改变
*@returnBoolean1or0
**/
$age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
asort($age);
print_r($age);//Array([Bill]=>35[Steve]=>37[Peter]=>43)

/**
*arsort按数组的value降序排序
*@Tips键不变,原有数组被改变
*@returnBoolean1or0
**/
$age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43");
arsort($age);
print_r($age);//Array([Peter]=>43[Steve]=>37[Bill]=>35)

/**
*ksort按数组的key升序排序
*@Tips键值不变,原有数组被改变
*@returnBoolean1or0
**/
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
ksort($age);
print_r($age);//Array([Bill]=>35[Peter]=>43[Steve]=>37)

/**
*krsort按数组的key降序排序
*@Tips键值不变,原有数组被改变
*@returnBoolean1or0
**/
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
krsort($age);
print_r($age);//Array([Steve]=>37[Peter]=>43[Bill]=>35)


4、数组的排序(二维数组)


<?php
$arr=array(
'd'=>array('id'=>5,'name'=>1,'age'=>7),
'b'=>array('id'=>2,'name'=>3,'age'=>4),
'a'=>array('id'=>8,'name'=>10,'age'=>5),
'c'=>array('id'=>1,'name'=>2,'age'=>2)
);
//方法一:自定义排序方法
functionmulti_array_sort($multi_array,$sort_key,$sort=SORT_ASC){
if(is_array($multi_array)){
foreach($multi_arrayas$row_array){
if(is_array($row_array)){
$key_array[]=$row_array[$sort_key];
}else{
returnfalse;
}
}
}else{
returnfalse;
}
array_multisort($key_array,$sort,$multi_array);
return$multi_array;
}
echo'<pre>';
print_r(multi_array_sort($arr,'id'));
echo'</pre>';
//方法二:推荐方法(手册)
foreach($arras$k=>$v){
$name[$k]=$v['name'];
}
array_multisort($name,SORT_ASC,$arr);
echo'<pre>';
print_r($arr);
echo'</pre>';

/**
*多维数组根据value进行排序,value可能是number也可能是string
*/
$a=array(
'001'=>array("name"=>"LHL","age"=>"25","count"=>array(2,3)),
'002'=>array("name"=>"XYQ","age"=>"22","count"=>array(3,1)),
'003'=>array("name"=>"aNN","age"=>"24","count"=>array(1,2)),
);

//functionmy_sort($x,$y){//安装$value进行排序并且valueisnumber
//return$x['count'][1]<$y['count'][1];
//}
functionmy_sort($x,$y){//安装$value进行排序并且valueisstring
returnstrcasecmp($x['name'],$y['name']);
}
uasort($a,"my_sort");//usort():外层数组的键重排
echo'<pre>';
print_r($a);
echo'</pre>';


8、php面向对象

1、魔术方法:在不同时刻为了完成某一功能自动调用的方法
function__construct(){//构造方法第一个调用的方法,初始化成员属性

}

function__destruct(){//析构方法对象释放前最后调用的方法

}
//和封装有关的方法

__get()//获取成员属性时自动调用的方法

/*

*private$name

*通过__get()方法可以外部调用$name

*/
privatefunction__get($proName){


return$this->$proName;


}

__set()//设置成员属性时自动调用的方法

/*

*private$name

*通过__set()方法可以外部设置$name

*/

privatefunction__set($proName,$proValue){


return$this->$proName=$proValue;


}

__isset()//在类外部使用isset($p->name)判断私有属性private$name是否存在时使用

privatefunction__isset($proName){


returnisset($this->$proName)


}
__unset()//删除私有成员的时候自动调用的方法
privatefunction__unset($proName){


unset($this->$proName);


}


__call()//调用类中不存在的方法时调用该方法

function__call($nethoName,$args){


echo“你调用的方法{$methoName}参数”;

print_r($args);

echo“不存在”;


}


__toString()//echo$p=newclassName使之返回一个字符串

function__toString(){


return“string”;


}


__clone()//克隆对象$p1=clone$p时调用的方法。为复本初始化
function__clone(){


$this->name=“复本张三”;//$this代表复本$that代表原本


}


__autoload()//自动加载,在类外部使用(加载类的时候使用很方便)

function__autoload($className){


include“./”.$className.”.class.php”;


}

$o=newOne();//自动加载当前目录下的One.class.php这个类

$t=newTwo();//自动加载当前目录下的Two.class.php这个类


//serialize()和unserialize()把对象转串行化和反串行化

$str=serialize($p);//$p=newClassName()由此可以把$str(对象)写进文件或者数据库

$unstr=unserialize($str);//通过$unstr->可以访问该类里面的属性和方法


__sleep()//serialize()序列化时自动调用的方法,可以将一个对象部分串行化
function__sleep(){


returnarray("name","age");


}


__weakup()//unrialize()反序列化时自动调用的方法,即对象反序列号时初始化函数
function__wakeup(){


$this->name="张三";

$this->age=20;


}


2、常用关键字

final:修饰类和方法,final修饰类不能继承,final修饰方法不能重载覆盖

static:静态,修饰属性和方法。


1、ClassName::$conunty这样的方式访问静态属性

2、self::$conunty类内部访问

3、staticfunctionfunName(){//静态方法中不能访问非静态成员



$this->$var//这种方法是错误的



}


const:只能修饰成员属性,在类中声明常量,用const。访问方式和static静态访问方式一样


$this,selef,parent


3、三大特性:封装、继承、多态


//封装性privatepublicprotected


//继承性

extends,private子类不能继承使用protected

子类重载父类的方法:定义与父类相同的成员方法

functionsay(){


parent::say($a,$b)

……


}

function__construct(){


parent::__construct($a,$b)

……


}


4、抽象类、接口、多态抽象类是一种特殊的类,接口是特殊的抽象类,多态会使用到抽象类或者接口


抽象类:有abstract修饰的类;并且里面至少有一个抽象方法;抽象类不能实例化对象;要想使用抽象类,就必须用一个类去继承抽象类,而且必须重写抽象方法。

抽象类和接口的作用是定义一些规范,让子类去继承

abstractclassDemo{//这是一个完整的抽象类


var$name;

abstractfunctiontest();//抽象方法,没有方法体

functionsay(){



}


}


classHelloextendsDemo{//该类继承抽象类


functiontest(){



……



}


}


接口:接口中的方法必须都是抽象方法,方法不用abstract修饰;接口中的成员属性只能声明常量,不能声明变量;接口中的成员的访问权限必须都是public

interfaceDemo{//接口的声明


constHOST=”localhost”;

functionfun1();

functionfun2();


}

echoDemo::HOST;


interfaceDemo2extendsDemo{//接口继承接口


functionfun3();

functionfun4();


}


interfaceDemo3{


functionfun5();

functionfun6();


}


classHello{


}


classextendsHelloimplementsDemo2,Demo3{//接口的实现、使用


functionfun1(){


}



functionfun2(){


}



functionfun3(){


}



functionfun4(){


}



functionfun5(){


}



functionfun6(){


}


}


多态:


interfaceTest{
functionaaa();

functionbbb();
}
classOneimplementsTest{

functionaaa(){

echo"aaaaaaaaaaa";
}
functionbbb(){

echo"bbbbbbbbbbbb";
}
}
classTwoimplementsTest{

functionaaa(){

echo"111111";
}
functionbbb(){

echo"222222";
}
}
$a=newOne;//Two

$a->aaa();

$a->bbb();



9、php正则表达式:

//preg_match单个匹配,如果有一个则匹配成功
if(preg_match("/php/i","PHPisthewebscriptinglanguageofchoice.")){
print"Amatchwasfound.";
}else{
print"Amatchwasnotfound.";
}
//preg_match_all匹配所有intpreg_match_all(string$pattern,string$subject,array$matches[,int$flags])

//preg_replacemixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit])
//在subject中搜索pattern模式的匹配项并替换为replacement。如果指定了limit,则仅替换limit个匹配,如果省略limit或者其值为-1,则所有的匹配项都会被替换。

//str_ireplace忽略大小写替换


10、文件处理:详解文件处理类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: