zoukankan      html  css  js  c++  java
  • PHP学习笔记

    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" border="1" 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) 返回当前执行脚本的路径

  • 相关阅读:
    287. Find the Duplicate Number
    基本排序算法实现
    Java内存模型
    JVM之垃圾收集器与内存分配回收策略(二)
    Java并发编程基础——同步
    二维数组的查找问题
    Maven整合SSM测试
    Mysql基础
    SpringMVC之Controller和参数绑定
    Spring+SpringMVC+Mybatis整合
  • 原文地址:https://www.cnblogs.com/deen-/p/7227776.html
Copyright © 2011-2022 走看看