PHP学习笔记


引用赋值
 <?php
$one=10;
$two=&$one

    ?>     
8种类型
  1. 整型
  2. 布尔型
  3. 浮点型
  4. 字符串
  5. 数组
  6. 对象
  7. 资源类型
  8. 空类型

var_dump()输出变量的值和类型

整型变量声明:

以0开头表示以八进制声明一个变量,以0x开头表示以十六进制声明一个变量。整数的最大值 4字节,2的32次方。

布尔类型声明:

整数的0和浮点数的0.000表示false. null表示false,"0" 表示false。 空数组表示false.

字符串的声明:

单引号和双引号,还有定界符 <<< 声明的字符串, 还有反引号。声明的字符串没有长度限制。双引号的字符串中,既可以直接解析变量,又可以直接使用转义字符。双引号中不能再使用双引号。使用定界符声明大量字符串。例子:

$str=<<<hello

//定界符以hello开头,就一定要以hello 结尾(中间是声明变量的位置)

hello;

单引号的字符串当中,不可以解析变量,也不可以使用转义字符(但可以转义单引号本身,也可以转义转义字符本身。)

数据类型转换

强制转换 和 自动转换

setType( 变量,类型)

整型在内存当中站四个字节,2的32次方,浮点型占8个字节。float 转 int 若是数字太大,会溢出,为0

与变量和类型有关的一些常用的函数
  1. isset()
  2. empty()
  3. unset()
  4. setType()
  5. getType()

变量类型测试函数

is_bool()

is_int()

is_string()

...

常量声明
  1. 常量是一个简单值的标识符
  2. 常量定义之后不能再改变他的值,也不能unset()取消
  3. 常量不用理会变量范围的规则而可以再任何地方都可以定义和访问
  4. 常量使用 define ( "常量名", 值)
  5. 常量声明时和使用都不使用 “$”
  6. 常量名称都习惯使用大写

运算符
  1. 算数运算符
  2. 字符串运算符: .
  3. 赋值运算符
  4. 比较运算符
  5. 逻辑运算符
  6. 位运算符
  7. 其它运算符: ? :

全等运算符 === ,比较时候不仅要求内容相同,也要求类型相同。先比较类型,再比较内容。

执行运算符:

会按系统命令shell执行,并将信息返回。示例如下:

$str=`ipconfig /all`;
echo $str;

错误控制符: @ 可以让错误不在页面中进行提示。


流程控制
  • 顺序结构
  • 分支结构--条件结构--选择结构
  • 循环结构

分支结构又可分为:单路分支,双路分支,多路分支,嵌套分支。

单路分支: if(条件)

双路分支: 使用else 从句,switch case

多路分支: switch case ,或者多重if else

if() {}
else if() {}
else if() {}

嵌套分支: if 里面嵌套if ,最好不雅超过五层。

php实现简单计算器
<html>
        <head>
                <title>PHP实现简单计算器</title>
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        </head>
<?php
        $num1=true;
        $num2=true;
        $numa=true;
        $numb=true;
        $message="";
        //单路分支
        if(isset($_GET["sub"])){
                if($_GET["num1"]==""){
                        $num1=false;
                        $message.="第一个数不能为空";

                }
                if(!is_numeric($_GET["num1"])){
                        $numa=false;
                        $message.="第一个数不是数字";
                }

                if($_GET["num2"]==""){
                        $num2=false;
                        $message.="第二个数不能为空";

                }
                if(!is_numeric($_GET["num2"])){
                        $numb=false;
                        $message.="第二个数不是数字";
                }
                

                if($num1 && $num2 && $numa && $numb) {
                        $sum=0;
                        //多路分支switch
                        switch($_GET["ysf"]){
                                case "+":
                                        $sum=$_GET["num1"]+$_GET["num2"];
                                        break;
                                case "-":
                                        $sum=$_GET["num1"]-$_GET["num2"];
                                        break;
                                case "x":
                                        $sum=$_GET["num1"]*$_GET["num2"];
                                        break;
                                case "/":
                                        $sum=$_GET["num1"]/$_GET["num2"];
                                        break;
                                case "%":
                                        $sum=$_GET["num1"]%$_GET["num2"];
                                        break;
                        }
                }
        }
?>

        <body>
                <table align="center"  width="500">
                        <caption><h1>计算器</h1></caption>
                        <form action="jsq.php">
                        <tr>
                                <td>
                                        <input type="text" size="5" name="num1" value="<?php echo $_GET["num1"] ?>" >
                                </td>
                                <td>
                                        <select name="ysf">
                                                <option value="+" <?php if($_GET["ysf"]=="+") echo "selected" ?>>+</option>
                                                <option value="-" <?php if($_GET["ysf"]=="-") echo "selected" ?>>-</option>
                                                <option value="x" <?php echo $_GET["ysf"]=="x"?"selected":"" ?>>x</option>
                                                <option value="/" <?php echo $_GET["ysf"]=="/"?"selected":"" ?>>/</option>
                                                <option value="%" <?php echo $_GET["ysf"]=="%"?"selected":"" ?>>%</option>
                                        </select>
                                </td>
                                <td>
                                        <input type="text" size="5" name="num2" value="<?php echo $_GET["num2"] ?>">
                                </td>
                                <td>
                                        <input type="submit" name="sub" value="计算">
                                </td>
                        </tr>

                        <?php
                                if(isset($_GET["sub"])){

                                        echo '<tr><td colspan="5">';
                                        if($num1 && $num1 && $numa && $numb){
                                                echo "结果:".$_GET["num1"]." ".$_GET["ysf"]." ".$_GET["num2"]." = ".$sum;
                                        }else{
                                                echo $message;
                                        }       
                                        echo '</td></tr>';
                                }
                        ?>
                        </form>
                        </table>

        </body>
</html>

循环结构
  1. while 循环
  2. do while 循环
  3. for 循环

根据循环条件不同有两种类型的循环: 一种是计数循环,另一种是 条件型循环。

函数的定义
function(){
    
}

可以在声明前调用,也可以声明后调用

形参:在申明变量时,声明的参数,参数就是变量。实参:调用函数时传给形参数值

  • 局部变量:在函数中声明的变量
  • 全局变量:在函数外声明,在函数声明以后的,知道整个脚本结束前都可以使用。包括在函数中,和 {}都可以使用。

php的变量分不出是声明还是使用。

在php中使用全局变量,要通过 global关键字将这个全局变量包含到这个函数中才能使用。

$a=10
function test(){
    global $a;  // 意思是调用函数外面的全局变量$a
    echo $a;
    
}

php的静态变量声明:static

静态变量声明只能在函数中声明,不能全局声明。

作用:一个变量可以在同一个函数中多次调用同用。

  • 静态变量在静态代码段中保存
  • 一个函数多次调用之间公用,但只在第一次调用函数声明到内存,以后再调用,就不再声明。而是直接使用。

默认函数,带有[] 的函数,表示这个函数时可选的,如果传了值就使用,没有传值则使用默认值,直接在声明函数时,就为参数传初值。

可选值和必须值,必须从后向前设置。

func_get_args() 获取函数所有的参数,返回一个数组。

回调函数,带有callback,调用这个函数时需要我们传一个函数进来 ,示例如下:

function demo ($x,$y){
    return $x*$y;
}

function sum($a,$b,$func){
    return $a+$b+$fun($a,$b);
}

echo sum(2,3,demo);
  • 内部函数:目的是在函数内部调用,帮助外部函数完成一些子功能,一般使用面向对象的封装。
  • 递归函数:

数组

概述:数组的本质是管理和操作一组变量,成批处理。数组时符合类型。数组中可以储存任意长度的数据,也可以储存任意类型的数据。数组可以完成其他语言结构的功能,如链表,队列等等。

php中的数组 ,索引数组,关联数组。索引数组用数字做索引,关联数组用字符串做索引。

数组的声明方式:

  • 直接为数组元素赋值声明
  • 使用array()函数 声明
  • 使用其他的函数声明

$a[0]=1; $b[电话]=110;

$a=array(
    "姓名"=>"高某";
    "公司"=>"A公司";
)

遍历数组

  • for语句遍历数组
  • foreach 遍历数组
  • while(),each() 等函数遍历数组

不首选for语句遍历,这种遍历方式必须是索引数组,而且下表必须连续

foreach 语句遍历: foreach (数组变量 as 变量值){},实例如下:

$user=array(1,"name"=>"zhangsan","age"=>40,100=>"nan")
foreach($user as $key=>$val){ //$var ,$key为自定义变量
    echo $key."==>".$var;
}


each() 函数遍历

  • 需要一个数组作为参数
  • 返回来的也是一个数组
  • 默认当前元素是第一个元素
  • 每执行一次后就会将当前元素向后移动
  • 如果到最后的元素再执行这个函数,返回false

组合使用如下:

$a[0]=1;
while(list($key,$value)=each($a)){
    
}

explode()函数

explode('.',$ip) //表示将$ip数组按 点 分割,并返回一个数组。

预定义数组

包含了来自web服务器,客户端,运行环境和用户输入的数据。这些数组比较特别,在全局范围内自动生效。因此通常被称作自动全局变量或者超全局变量。用户不能定义这些超全局变量,所以在定义变量时应避免和预定的全局变量重名。

  • $_GET //经URL请求提交至脚本的变量
  • $_SERVER //变量由服务器设定,或直接和当前脚本的执行环境相关联
  • $_POST //经HTTP POST方式提交至脚本的变量
  • $_REQUEST //此关联数组包含了 $_GET,$_POST,$_COOKIE中的全部内容。
  • $_COOKIE
  • $_SESSION //
  • $GLOBALS
  • $_ENV //输出当前操作系统的信息
  • $_FILES //经由HTTP POST 文件上传而提交至脚本
数组处理函数
  • array_values:

    返回数组中全部的值,并建立一个新的索引数组储存

  • array_keys:

    返回数组中全部的键名

  • in_array():

    检查数组中是否存在某个值,即在数组中搜索给定的值。这个函数有三个参数。若存在,则返回true。

  • array_key_exists() 检查给定的键名或索引是否在数组中

  • array_flip() 交换数组中的键和值

  • array_reverse() 返回一个单元顺序相反的数组

统计数组的元素个数
  • count
  • array_count_values() 返回一个数组,键为原来的值,值为出现的次数
  • array_unique()

    用于删除数组中重复的值,并返回没有重复值得新数组。

使用回调函数处理数组
  • array_filter() 过滤数组中的单元
  • array_walk() 数组中的每个成员应用用户函数
  • array_map() 比walk处理多个数组
数组的排序函数
  • sort() 按元素值从小到大
  • rsort() 从大到小
  • usort() 按用户的规则排序
  • asort() 元素的值升序排序
  • arsort() 元素的值降序排序
  • uasort()
  • ksort() 按键从小到大
  • krsort() 从大到小
拆分,合并,分解,接合的数组函数
  • array_combine(a,b) ,将两个数组合成一个数组,一个是键,一个位值

  • array_slice()

  • array_splice()

  • array_merge() 合并多个数组

  • array_intersect() 返回数组的交集

  • array_diff() 返回数组的差集

数组实现数据结构
其他

array_rand() 随机取值,后一个参数为数量

shuffle() 随机化数组

array_sum 返回数组中所有值得总和。


面向对象的程序设计

对象的三大特性:封装,继承,多态

与面向过程的区别,面向过程的最小单位是函数,面向对象的最小单位是对象。对象中包含函数,变量。也就是成员方法,成员属性。统称为成员。

封装:private

private修饰的只能在内部使用

protected 内部,子类都能访问,外部访问不了。

子类重载父类的方法: partent::方法名()

php中常用的关键字
  • final 不修饰成员属性,只能修饰类和方法。使用final修饰的类,不能被子类继承,final修饰的方法不能被子类覆盖。用来限制类不被继承,方法不被覆盖。
  • static 静态关键字,能将类中的成员标识为静态。可以修饰成员属性和成员方法,不能修饰类。用static修饰的成员属性,可以被同一个类所有对象共享。静态的对象,存在内存中的数据段之中,也就是初始化静态段。静态的数据是在类第一次加载时,分配到内存当中去,以后再用到类时,就直接从数据段中获取。只要在程序中使用到这个类,类就被加载了。

    注意:静态成员都要使用类名去访问,不用创建对象。

类名::成员名

  • const关键字,类成员属性定义为常量。不需要加$ ,通过类名访问,或者self关键字。

clone :克隆对象。

魔术方法
  • _call() 作用:在调用不存在的方法时自动调用。调用对象不存在的方法时,系统会报错,程序退出。什么时候自动调用:就会在调用一个对象不存在的方法时自动调用。需要两个参数。第一个参数是不存在的方法名,第二个参数 args。

  • _toString() 直接输出对象引用时自动调用,用来快速获取对象的 字符串,用来快速获取对象字符串最便利的方式。


对字符串处理函数

linux/unix 下的路径分隔符 /

windows 下的为 \

但是不管什么系统都可以用 /,在php和 apache配置文件中也可以使用 / 做分隔符。

绝对路径:

如果在服务器中执行路径,则根指的是操作系统的根。

如果程序是下载到客户端,再访问服务器中的文件时,只有通过apache访问,“根”也就指的是文档的根目录。

basename():

返回文件名部分。

dirname:

与basename() 相反,返回路径信息。不包含文件名和文件格式。

pathinfo():

返回一个关联数组,期中包括制定路径的目录名。

touch("文件名"):

创建文件

unlink:

删除文件

copy("当前","目标")

dirname(FILE) 返回当前执行脚本的路径