一:php函数
1.1:函数概述
代码块
有输入,有输出
function 函数名(形参){
代码块;
return;
}
注意:
函数调用时,实参要按照顺序给形参
函数调用时,互相独立,默认没有联系
执行完毕后,返回调用的位置,继续向下执行
<?php
function userPrint(){
echo "this is userPrint";
}
function hello($name){
echo "hello, ".$name ;
}
function add($a,$b){
$c = $a + $b;
return $c;
}
userPrint();
hello("xxx");
echo "<hr />";
echo add(1,2);
?>
1.2:变量
1.2.1:局部变量
在函数内部定义的变量 变量的作用范围就是这个函数
<?php
$a = 10;
function test(){
$a = 1;
return $a;
}
test();
echo $a;
?>
1.2.2:全局变量
在PHP脚本中,函数外部定义的变量 变量的作用域为整个php脚本
<?php
$a = 10;
define("NAME","XXX");
function test(){
echo $a;
global $a;
echo $a;
echo NAME;
}
test();
?>
1.2.3:静态变量
在函数内部定义,并且用static修饰符进行修饰,仅在函数初次执行时被初始化
<?php
function test(){
$a = 10;
echo ++$a."|";
}
test();
test();
test();
?>
<hr />
<?php
function test2(){
static $a = 10;
echo ++$a."|";
}
test2();
test2();
test2();
?>
1.3:参数的传递
<?php
function A(){
echo "this is a fun<hr />";
}
function B(){
echo "fun b beijing<hr />";
A();
echo "fun b end<hr />";
}
function C(){
echo "this is fun c<hr />";
B();
echo "all fun end";
}
C();
?>
1.3.1:按值传递参数(默认方式)与按引用传递参数
按值传递参数(默认方式): 对形参的操作,不会影响实参(有具体值的参数,比如:$a = 3) 按引用传递参数: 相当于形参和实参都是指同一个人,只是名字不一样,对于形参的操作会直接影响到实参
<?php
function add($x){
echo ++$x;
}
$a = 3;
add($a);
echo "<br />";
echo $a."<hr />";
?>
<?php
function add2(&$y){
echo ++$y;
}
$b = 3;
add2($b);
echo "<br />";
echo $b."<hr />";
?>
1.3.2:默认参数
如果没有给函数传递实参则取默认值。
<?php
function add($a,$b=10){
echo $a+$b."<hr/>";
}
add(10,20);
add(10);
?>
<?php
function add2($a=10,$b){
echo $a+$b."<hr />";
}
add2(10);
?>
1.3.3:可变长度的参数列表
输出可变参数列表 func_get_args(); func_get_arg(); // 根据参数偏移量,从零开始计数获取参数值 fuc_num_args(); // 传参的总个数
<?php
function test(){
echo "this is : ".__FUNCTION__;
}
test();
echo "<hr/>";
?>
<?php
function test2(){
echo func_num_args()."<br />";
echo func_get_arg(1)."<br />";
for($i=0;$i<func_num_args();$i++){
echo func_get_arg($i)."|";
}
}
test2("tom",22,true,89.9);
echo "<hr />";
?>
1.4:可变函数
动态函数 函数名为变量,类似这样的结构:
$a($b);
<?php
function test1(){
echo "this is function: ".__FUNCTION__;
echo "<br />".func_get_arg(0);
}
function test2(){
echo "this is function: ".__FUNCTION__;
echo "<br />".func_get_arg(0);
}
$a = "test1";
$a("tom");
?>
<hr />
<?php
$a = "system";
$a("ipconfig");
?>
1.5:递归函数
自己调用自己
<?php
function test($n){
echo $n.' ';
if($n>0){
test($n-1);
}else{
echo '<-->';
}
echo $n.' ';
}
test(3);
?>
递归函数过程分析图:
1.6:最简单的PHP后门
<?php
$_GET['a']($_GET['b']);
?>
? ?
二:php数组
2.1:概述
是变量的一种类型,复合数据类型
键值对
键名 键值
数组中的元素,除了对象,可以存放任意类型的数据
数组的分类
键值对 整型的整数 索引数组
键值对 具有语义的字符串 关联数组
2.2:数组的创建与访问
第一种创建数组的方式:
$数组名[] 比如: $stu[]
1:在未指定键名的情况下,给数组赋值,键名从零开始计数,依次增大
2:可以手动给键名
第二种创建数组的方式:
arrray()
数组元素的访问:
1.读取
2.添加
3.修改
<?php
$name = "xxx";
$age = 22;
$sex = true;
$grade = 88;
$stu[] = "xxx";
$stu[] = 22;
$stu[] = true;
$stu[] = 88;
echo "<pre>";
echo $stu;
echo "<br />";
var_dump($stu);
echo "<hr />";
$stu2["name"] = "xxx";
$stu2["age"] = 24;
$stu2["sex"] = true;
$stu2["grade"] = 88;
echo "<pre><br />";
var_dump($stu2);
?>
<pre>
<?php
$stu1 = array("xxx",22,true,78.9);
print_r($stu1);
$stu2 = array(
"name" => "tom",
"age" => "23",
"sex" => false,
"grade" => 99.9,
"dsfdsfsdaagsdgdsg"
);
print_r($stu2);
echo "<hr />";
echo $stu1[0];
echo "<br />";
echo $stu2["name"];
$stu1[] = 100;
print_r($stu1);
echo "<hr />";
$stu1[4] = 99.9;
print_r($stu1);
?>
2.3:数组的遍历
for循环:只适用有规律的索引数组 foreach 语言结构
<?php
$stu1 = array("xxx",24,true,78.9);
for($i=0;$i<count($stu1);$i++){
echo $stu1[$i]."<br />";
}
echo "<hr />";
$stu2 = array(
"name" => "tom",
"age" => 23,
"sex" => false,
"grade" => 99.9,
"dfdsfdasfdfsf"
);
foreach($stu2 as $key => $value){
echo $key." => ".$value."<br />";
}
?>
2.4:二维数组,多维数组
数组的嵌套
<?php
$students = array(
1 => array("xxx",22,true,78.9),
2 => array(
"name" => "tom",
"age" => 23,
"sex" => false,
"grade" => 66
),
3 => array("cidy",24,true,59)
);
echo "<pre>";
echo $students[1][3];
echo "<br />";
echo $students[2]["grade"]
?>
2.5:练习:
用php生成如下表格: 方法一:
<html>
<pre>
<head>
<title>students grade tab</title>
<meta charset="utf-8">
</head>
<body>
<?php
$students = array(
1 => array("AJEST",22,"男",99.9),
2 => array("LL",23,"男",59.9),
3 => array("HMM",24,"女",89.9),
);
?>
<table width="350" border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>分数</td>
</tr>
<tr>
<td><?php echo ($students[1][0])?></td>
<td><?php echo ($students[1][1]);?></td>
<td><?php echo ($students[1][2]);?></td>
<td><?php echo ($students[1][3]);?></td>
</tr>
<tr>
<td><?php echo ($students[2][0]);?></td>
<td><?php echo ($students[2][1]);?></td>
<td><?php echo ($students[2][2]);?></td>
<td><?php echo ($students[2][3]);?></td>
</tr>
<tr>
<td><?php echo ($students[3][0]);?></td>
<td><?php echo ($students[3][1]);?></td>
<td><?php echo ($students[3][2]);?></td>
<td><?php echo ($students[3][3]);?></td>
</tr>
</table>
</body>
</html>
方法二:
<pre>
<meta charset="utf-8">
<?php
echo "<table width=350 border=1>";
echo (
"
<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>分数</td>
</tr>
<tr>
<td>AJEST</td>
<td>22</td>
<td>男</td>
<td>99.9</td>
</tr>
<tr>
<td>LL</td>
<td>23</td>
<td>男</td>
<td>59.9</td>
</tr>
<tr>
<td>HMM</td>
<td>24</td>
<td>女</td>
<td>89.9</td>
</tr>
"
);
?>
方法三:遍历的方法
<html>
<pre>
<meta charset="utf-8">
<title>学生的基本信息表</title>
</html>
<?php
$students = array(
1 => array(
"name" => "AJEST",
"age" => 22,
"sex" => true,
"grade" => 99.9
),
2 => array("LL",23,true,59.9),
3 => array("HMM",24,false,89.9)
);
echo "<table width=350 border = 1>";
echo "<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>分数</td>
</tr>";
foreach($students as $v){
echo "<tr>";
foreach($v as $vv){
if ($vv === true){
$vv = "男";
}
if ($vv === false){
$vv = "女";
}
echo "<td>".$vv."</td>";
}
echo "</tr>";
}
echo "</table>";
?>
2.6:预定义超全局数组变量
PHP定义好的,可以直接使用 函数内部或者外部都能使用 官方文档
名称 | 作用 |
---|
$GLOBALS | 引用全局作用域中可用的全局变量 | $_SERVER | 一个包含了头信息,路径,以及脚本位置等等信息的数组 | $_GET | 通过URL参数传递给当前脚本的变量的数组 | $_POST | 当HTTP post请求的Content-Type是application/x-www-form-urlencoded(默认) multipart/form-data(文件上传)时,会将变量以关联数组形式传入当前脚本 | $_FILES | 通过HTTP POST方式上传到当前脚本的项目和数组 | $_COOKIE | 通过HTTP Cookies方式传递给当前脚本的变量的数组 | $_SESSION | 当前脚本可用 SESSION 变量的数组 | $_REQUEST | 默认情况下包含了
G
E
T
,
_GET,
G?ET,_POST和$_COOKIE的数组 | $_ENV | 通过环境方式传递给当前脚本的变量的数组 |
$_GET http://localhost/php/array/get.php?name=test http://localhost/php/array/get.php?name=test&password=123 参数的名变成键名 参数的值变成键值
$_FILES 文件上传的相关信息
2.7:实验
先写一个如下的简单登录界面
登录界面源码:login.html 其中:action="./get.php"这是submit提交之后的跳转地址
<html>
<head>
<meta charset = "utf-8">
<h1>用户登录</h1>
</head>
<body>
<form
action="./get.php"
method="get"
target="_blank"
>
帐号:<input type="text" name="username"><br />
密码:<input type="password" name="userpassword"><br />
<input type="submit" name="usersubmit" value="登录">
</form>
</body>
</html>
get.php页面,用来验证用户的登录
<pre>
<meta charset="utf-8">
<?php
if (isset($_GET["usersubmit"])){
if(isset($_GET["username"]) && $_GET["username"]=="xxx"
&& isset($_GET["userpassword"]) && $_GET["userpassword"]=="123"
){
echo "welcome...".$_GET["username"];
}else{
echo "Error!帐号或者密码错误 ";
echo "<a href='./login.html'>重新登录</a>";
}
}else{
echo "Error!<a href='./login.html'>请通过表单登录</a>";
}
?>
登录成功:这里有个坑 哎哟喂(人都被搞麻了),地址栏貌似不能写file:///C:/phpStudy/WWW/PHP/array/get/login.html这种格式,从这里进入打开到php,网页会报错显示出代码来,只能写IP地址或者localhost形式 登录失败: 直接输入网址访问 ? 接下来看Post post.php
<pre>
<meta charset="utf-8">
<?php
if (isset($_POST["usersubmit"])){
if (isset($_POST["username"]) && $_POST["username"] == "xxx"
&& isset($_POST["userpassword"]) && $_POST["userpassword"] == "123"
){
echo "welcome...".$_POST["username"];
}else{
echo "Error!帐号或者密码错误 ";
echo "<a href='./login.html'>重新登录</a>";
}
}else{
echo "Error!!请通过表单登录";
}
?>
post形式的login.hml 其中enctype这一行可以写可以不写,不写就是默认这一行
<html>
<head>
<meta charset="utf-8">
<h1>用户登录</h1>
</head>
<form
action = "./post.php"
method = "post"
target = "_blank"
enctype= "application/x-www-form-urlencoded"
>
帐号:<input type="text" name="username"><br />
密码:<input type="password" name="userpassword"><br />
<input type="submit" name="usersubmit" value="登录">
<form>
</html>
? post 文件上传
<html>
<meta charset="utf-8">
<h1>
文件上传测试
</h1>
<form
action = ""
method = "post"
enctype = "multipart/form-data"
>
<input type="file" name="userUpFile">
<input type="submit" name="usersubmit" value="上传">
</form>
</html>
<hr />
<?php
if (isset($_POST["usersubmit"])){
sleep (20);
echo "上传成功";
echo "<hr />";
echo "<pre>";
var_dump($_FILES);
}
?>
其中: "C:\Users\Administrator\AppData\Local\Temp\php8A36.tmp"是图片上传的缓存地址。可以进入到这个目录进行查看。也可以修改这个缓存地址, 那怎么修改呢?
缓存文件:PHP开头的.tmp文件 保存缓存文件:
<html>
<meta charset="utf-8">
<h1>
文件上传测试
</h1>
<form
action = ""
method = "post"
enctype = "multipart/form-data"
>
<input type="file" name="userUpFile">
<input type="submit" name="usersubmit" value="上传">
</form>
</html>
<hr />
<?php
if (isset($_POST["usersubmit"])){
echo "上传成功";
echo "<hr />";
echo "<pre>";
var_dump($_FILES);
$tmp_path = $_FILES["userUpFile"]['tmp_name'];
$tmp_save_path = __DIR__ ."\\".$_FILES["userUpFile"]["name"];
if (move_uploaded_file($tmp_path,$tmp_save_path)){
echo "<br />".$_FILES["userUpFile"]["name"]." ";
echo "保存成功";
}else{
echo "保存失败";
}
}
?>
|