php基础知识

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 /> &nbsp;').'<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、文件处理:详解文件处理类

posted @ 2015-07-29 12:21  龍飛鳯舞  阅读(355)  评论(0编辑  收藏  举报