1、php嵌套模式
<?php ... ?> <? ... ?> <% ... %> <script language="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 '<h4 style="color:#f00">时间函数</h4>'; echo time().'<br />';//当前时间unix时间戳 echo date("Y:m:d H:i:s").'<br />';//当前格式化时间 /*字符串函数*/ echo '<h4 style="color:#f00">字符串函数</h4>'; $word = " abc d ef "; echo strlen($word).'<br />';//获取字符串长度 空格也算 echo implode("-",array(1,2,3,4)).'<br />';//数组转换成字符串,用“-”连接 print_r(explode("-","1-2-3-4"));//字符串转换成数组 以“-”分割 echo '<br />'; echo ltrim($word,'b').'<br />';//剔除左边空格 echo rtrim($word,'b').'<br />';//剔除右边空格 echo trim($word,'b').'<br />';//剔除两边空格 echo substr($word,0,3).'<br />';//ab 截取字符串 若第二个参数为负数,则从倒数第几个开始取,但是截取规则还是从左到右 echo str_replace("b","_",$word).'<br />';//查找与替换字符串 echo strtoupper($word).'<br />';//小写转大写 echo strtolower('ABCDEF').'<br />';//大写转小写 echo ucfirst('abc').'<br />';//首字母转大写,只操作首字母 echo htmlentities('<br /> ').'<br />';//打印标签 echo substr_count('abcdagca','a').'<br />';//返回第二个字符串在第一个字符串中出现的次数 echo strpos('abcdagca','a').'<br />';//查找a在第一个字符串中第一次出现的位置,第一个位置为0 echo strrpos('abcdagca','a').'<br />';//查找a在第一个字符串中最后一次出现的位置,第一个位置为0 echo strstr('sddabdsabg','ab').'<br />';//截取ab以后的字符串(包括ab) echo strrchr('sdfabkjkabsdf','ab').'<br />';//截取最后一个ab以后的字符串(包括ab) echo addcslashes("abcdefghijklman","akd").'<br />';//查找字符串中akd,并且在前面加上 echo str_pad('abc',10,'a',0).'<br />';//字符串填充函数: 把字符串abc左填充a到10位,0:左填充;1:右填充;2:两边填充 默认左填充 echo strcmp('b','c').'<br />';//字符串比较函数:阿克斯码值,返回1 0 -1 echo number_format(1235.3254,2,":",";").'<br />';//格式化数字函数: 2:保留两位小数,四舍五入 ::小数点用冒号表示,;:三位分隔符
8、php数组
1、数组的遍历
for($i=0; $i<count($arr); $i++){ echo "$user[{$i}]=".$arr[$i]."<br>"; }
foreach($arr as $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/3635 count($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升序排序 * @ Tips key from 0,1... 键重新排,原有数组被改变 * @ return Boolean 1 or 0 **/ $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB"); sort($cars); print_r($cars);//Array ( [0] => BMW [1] => SAAB [2] => Volvo ) /** * rsort 按数组的value降序排序 * @ Tips key from 0,1... 键重新排,原有数组被改变 * @ return Boolean 1 or 0 **/ $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB"); rsort($cars); print_r($cars);//Array ( [0] => Volvo [1] => SAAB [2] => BMW ) /** * asort 按数组的value升序排序 * @ Tips 键不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43"); asort($age); print_r($age);//Array ( [Bill] => 35 [Steve] => 37 [Peter] => 43 ) /** * arsort 按数组的value降序排序 * @ Tips 键不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43"); arsort($age); print_r($age);//Array ( [Peter] => 43 [Steve] => 37 [Bill] => 35 ) /** * ksort 按数组的key升序排序 * @ Tips 键值不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); ksort($age); print_r($age);//Array ( [Bill] => 35 [Peter] => 43 [Steve] => 37 ) /** * krsort 按数组的key降序排序 * @ Tips 键值不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $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) ); //方法一:自定义排序方法 function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ if(is_array($multi_array)){ foreach($multi_array as $row_array){ if(is_array($row_array)){ $key_array[]=$row_array[$sort_key]; }else{ return false; } } }else{ return false; } array_multisort($key_array,$sort,$multi_array); return $multi_array; } echo '<pre>'; print_r(multi_array_sort($arr,'id')); echo '</pre>'; //方法二:推荐方法(手册) foreach($arr as $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)), ); // function my_sort($x,$y){//安装$value进行排序并且value is number // return $x['count'][1]<$y['count'][1]; // } function my_sort($x,$y){//安装$value进行排序并且value is string return strcasecmp($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
*/
private function __get($proName){
return $this->$proName;
}
__set()//设置成员属性时自动调用的方法
/*
* private $name
* 通过__set()方法可以外部设置 $name
*/
private function __set($proName,$proValue){
return $this->$proName=$proValue;
}
__isset()//在类外部使用isset($p->name)判断私有属性private $name是否存在时使用
private function __isset($proName){
return isset($this->$proName)
} __unset()//删除私有成员的时候自动调用的方法 private function __unset($proName){
unset($this->$proName);
}
__call()//调用类中不存在的方法时调用该方法
function __call($nethoName,$args){
echo “你调用的方法{$methoName}参数”;
print_r($args);
echo “不存在”;
}
__toString()//echo $p = new className 使之返回一个字符串
function __toString(){
return “string”;
}
__clone()//克隆对象$p1 = clone $p 时调用的方法。为复本初始化
function __clone(){
$this->name = “复本张三”;//$this 代表复本 $that 代表原本
}
__autoload() //自动加载,在类外部使用(加载类的时候使用很方便)
function __autoload($className){
include “./”.$className.”.class.php”;
}
$o = new One();//自动加载当前目录下的One.class.php这个类
$t = new Two();//自动加载当前目录下的Two.class.php这个类
//serialize()和unserialize()把对象转串行化和反串行化
$str = serialize($p);//$p = new ClassName() 由此可以把$str(对象)写进文件或者数据库
$unstr = unserialize($str);//通过$unstr->可以访问该类里面的属性和方法
__sleep()//serialize()序列化时自动调用的方法,可以将一个对象部分串行化
function __sleep(){
return array("name","age");
}
__weakup()//unrialize()反序列化时自动调用的方法,即对象反序列号时初始化函数 function __wakeup(){
$this->name = "张三";
$this->age = 20;
}
2、常用关键字
final:修饰类和方法,final修饰类不能继承,final修饰方法不能重载覆盖
static:静态,修饰属性和方法。
1、ClassName::$conunty 这样的方式访问静态属性2、self::$conunty 类内部访问3、static function funName(){//静态方法中不能访问非静态成员
$this->$var//这种方法是错误的
}
const:只能修饰成员属性,在类中声明常量,用const。访问方式和static静态访问方式一样
$this,selef,parent
3、三大特性:封装、继承、多态
//封装性 private public protected
//继承性
extends ,private 子类不能继承使用 protected
子类重载父类的方法:定义与父类相同的成员方法
function say(){
parent::say($a,$b)……
}
function __construct(){
parent::__construct($a,$b)……
}
4、抽象类、接口、多态 抽象类是一种特殊的类,接口是特殊的抽象类,多态会使用到抽象类或者接口
抽象类:有abstract修饰的类;并且里面至少有一个抽象方法;抽象类不能实例化对象;要想使用抽象类,就必须用一个类去继承抽象类,而且必须重写抽象方法。
抽象类和接口的作用是定义一些规范,让子类去继承
abstract class Demo {//这是一个完整的抽象类
var $name;abstract function test();//抽象方法,没有方法体
function say(){
}
}
class Hello extends Demo{//该类继承抽象类
function test(){
……
}
}
接口:接口中的方法必须都是抽象方法,方法不用abstract修饰;接口中的成员属性只能声明常量,不能声明变量;接口中的成员的访问权限必须都是public
interface Demo{//接口的声明
const HOST=”localhost”;function fun1();function fun2();
}
echo Demo::HOST;
interface Demo2 extends Demo{//接口继承接口
function fun3();function fun4();
}
interface Demo3{
function fun5();function fun6();
}
class Hello{
}
class extends Hello implements Demo2,Demo3{//接口的实现、使用
function fun1(){}
function fun2(){}
function fun3(){}
function fun4(){}
function fun5(){}
function fun6(){}
}
多态:
interface Test{
function aaa();
function bbb();
}
class One implements Test{
function aaa(){
echo "aaaaaaaaaaa";
}
function bbb(){
echo "bbbbbbbbbbbb";
}
}
class Two implements Test{
function aaa(){
echo "111111";
}
function bbb(){
echo "222222";
}
}
$a = new One;//Two
$a->aaa();$a->bbb();
9、php正则表达式:
//preg_match 单个匹配,如果有一个则匹配成功 if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } //preg_match_all 匹配所有 int preg_match_all ( string $pattern , string $subject , array $matches [, int $flags ] ) //preg_replace mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] ) //在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。 //str_ireplace 忽略大小写替换
10、文件处理:详解文件处理类