PHP基础笔记

PHP环境搭建和开发工具

1.环境搭建

要使用PHP,首先要建立PHP的开发环境。

1)WAMP

  W:Windows

  A:Apache

  M:mysql

  P:PHP

2)LAMP

  L:Linux
  A:apache
  M:mysql
  P:PHP

3) LNMP

 N:nginx

4)继承环境phpstudy
需要将网页放在phpstudy_pro\WWW 目录下才能生效
浏览器通过localhost(或本机ip地址)/(WWW目录下的项目名)/index.php
访问

2.常用开发工具
Dreamweaver、ZendStudio、PhpStorm、NotePad++、EditPlus、Visual Studio Code

标记风格注释与定义

标记风格

1.XML风格

<?php        

?>

写在这一段代码里的内容才会被读取为PHP文件,如果为纯php代码,结束符建议不写

开始总是值得纪念,那么,先向世界说你好吧!

<?php        
    echo'Hello world';
?>

在这里插入图片描述
2.简短风格(不建议使用)

<? echo '这是极短风格的标记'; ?>

3.脚本风格(很少使用)

<script language="php">
echo '这是脚本风格的标记';
</script>

注释

  • 单行注释
<?php
//这是写在PHP语句上方的单行注释
echo '使用C++风格的注释';
?>
  • 多行注释(/* 这是多行注释 */
  • #风格的注释(# 这是#风格的注释,也用于单行注释

定义方式

  • 变量
    区分大小写
<?php        
    $a=123;
    echo $a;
?>

变量的定义规则:
1.必须以字母或下划线开头,不能以字母开头
2.变量名称不能包含特殊字符,如: ∗ , *, ,?,$%,$12*等
3.变量名字尽量起的要有意义
4.变量名字区分大小写

  • 常量
    用define定义,不能轻易被改变,不会被后面覆盖
define('A',3);
echo A;
//A为常量的名称,3为值(也可为字符串)
//可以小写,但为了与变量作区分,一般采用大写

数据类型

布尔型

布尔型是PHP中较为常见的数据类型之一,它保存一个true值(代表真)和false(代表假)值。其中true和false是PHP的内部关键字

<?php
    $boo=true;
    if($boo==true)
    {
        echo'真';
    }    
    else
    {
        echo'假';
    }
?>  //结果输出真

字符串型(string)

字符串是连续的字符序列,由数字、字母和符号组成。字符串中的每个字符只占用一个字节。在PHP中,有三种定义字符串的方式,分别是单引号(’ ')、双引号(" ")、和定界符(<<<)

<?php
$str=<<<END
	//需要设置一个开始和结束标识符,一般用于定义大文本
    Hello world
END;
echo $str;
?> 

单引号和双引号的区别

双引号里的变量会被解析,单引号里的变量不会被解析会当成普通字符处理
单引号只能解析部分字符,双引号能解析所有字符
单引号执行速度比双引号快
<?php
$a='白露';
$b='为霜';
echo '$a ';
echo "$b";
?>

在这里插入图片描述
可以看到单引号的变量没有被解析,被当成普通字符串处理

整型(integer)

整型数据类型只能包含整数

<?php
$int = 123;
?>

浮点型(float)

浮点数据类型可以用来存储数字,也可以保存小数
<?php $float = 1.23; ?>

注意:浮点型的数值只是一个近似值,所以要尽量避免浮点型数值之间比较大小,因为最后的结果往往是不准确地

数组(array)

一维数组
数组中的每个数据成为一个元素,元素包括索引(键名)和值两个部分。元素的索引可以由数字和字符串组成,元素的值可以是多种数据类型

<?php
$array = array(1,2,45,32,'python课好无聊啊啊啊');//第一种定义方式通过 array() 
$a=['2023','4月1日','16:58'];//第二种定义方式 数组名[]
// 可以自己定义下标
$a=['2023','4月1日','16:58','A'=>'浮云难蔽日'];
$a['B']='雾散终有时';
echo "$a[A],";
echo $a[B]; // echo不能输出整个数组,只能打印某一个值
?>

在这里插入图片描述
下标全部为数字的数组为数字索引数组,默认下标从零开始不需要特别指定
下标只要有一个字符的数组为关联数组

print() 也可用于输出,但也只能输出某一个元素,它不是函数,也可以不用加()
print_r(数组名);可用于输出整个数组的数组名、下标、值

$a=['2023','4月1日','16:58','A'=>'浮云难蔽日'];
print_r($a);

在这里插入图片描述
var_dump(); 和print_r 类似,不同在于var_dump() 可输出数组长度、元素类型(但只输出一个值的话就只会输出值,不会有类型、下标那些)

$a=['2023','4月1日','16:58','A'=>'浮云难蔽日'];
var_dump($a);

在这里插入图片描述
二维数组

$a=[1,2,3,4,'a'=>['你好','世界','2023年4月1日20:40:06']];
echo $a[a][2];// 找到时间 
$a=[1,2,3,4=>[5,6,7=>[8,9]]];

嵌套三层为三维数组
嵌套四层为。。等等等等,你先婷婷,差不多就可以了

数组常用函数

  • 统计数组的元素个数
count(数组名,mode)
数组名:必要参数,输入的数组
mode:可选参数,COUNT_RECURSIVE(或1),如选中此参数则会算上多维数组
  • 查找元素
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a,true);//结果为:0
?>

最后一个参数为可选参数,如果值为true,则查找类型与值都满足的元素

  • 添加元素
<?php
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>

使用array_push()函数可以向数组中添加元素,该函数将传入的元素添加到某个数组的末尾,并返回数组新的单元总数
在这里插入图片描述

  • 获取数组中的最后一个元素
<?php
$a=array("red","green","blue");
array_pop($a);
print_r($a);
?>

通过array_pop()函数可以获取并返回数组中的最后一个元素,并将数组的长度减1,如果数组为空(或者不是数组)将返回null

  • 删除重复元素
<?php
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");
print_r(array_unique($a));
?>
  • 合并数组
array_merge(array1,array2,array3...)
<?php
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));//结果为:Array ( [a] => red [b] => yellow [c] => blue )
?>
通过array_merge()函数将两个或多个数组合并成一个数组。
如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引
  • 获取指定元素的键名
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a,true);  //返回结果为:a
?>

该函数可获取数组中指定元素的键名,在数组中搜索给定的值,找到后返回键名,否则返回false
第三个为可选参数,若为true,还会检查类型

空值(null)

空值,顾名思义,表示没有为该变量设置任何值。另外,空值(null)不区分大小写,null和NULL效果是一样的。被赋予空值的情况有3种:还没有赋任何值、被复制null、被unset()函数处理过的变量
is_null()函数用于判断变量是否为null,该函数返回一个boolean型,如果变量为null,则返回true,否则返回false。unset()函数用来销毁制定的变量

数据类型转换

(数据类型)变量名

<?php
$num = '3.1415926r*r';
echo '使用(integer)操作符转换变量$num类型:';
echo (integer)$num;//使用integer转换类型
echo '<p>';
echo '输出变量$num的值:'.$num;
echo '<p>';
echo '使用settype函数转换变量$num类型:';
echo settype($num,'integer');
echo '<p>';
echo '输出变量$num的值:'.$num;
?>

检测数据类型

is_数据类型()

<?php
    $boo = "0123456789";        //定义一个全由数字组成的字符串变量
    if(is_int($boo)){            //使用if语句来判断
        echo "boo变量是整型";
    }else{
        echo "boo变量不是整型";
    }
    echo '<br>';
    if(is_numeric($boo)){
        echo "boo变量是数字或数字组成的字符串";
    }else{
        echo "boo不是数字";
    }

运算符

字符串运算符
英文的 . 用于将两个字符串连接起来,也可使用 .= (类似c的+=)

<?php
$a=3;
$b = "七里香 ";
$c = 25;
$d = "稻香";
echo $b . $d . $a . $c;  //输出 七里香 稻香325
?>

赋值运算符和递增减
在这里插入图片描述

// $a++ 和 ++$a 和c语言类似

比较运算符和逻辑运算符
在这里插入图片描述
两种写法效果一样
比较运算符==、>= 、!= 和c类似
在这里插入图片描述
当变量类型和值都相同时为恒等

$a = 2;
$b ='2';  //$a !== $b

三元运算符

(expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3
/* 如果条件 “expr1”成立,则执行语句 “expr2”,否则执行 “expr3” */

使用三元运算符时,如果需要打印字符串,建议使用 print 语句替代 echo 语句(也可用变量接受这个三元运算符的结果,然后echo输出,但执行语句里输出还是用print输出好一点)

此外,三元运算符还可以扩展使用,当设置的条件成立或不成立,执行语句都可以不止一句

(expr1) ? (expr2).(expr3) : (expr4).(expr5);

虽然三元运算符支持嵌套使用,但别闹了,复杂的用if、else就可以了

循环与分支

分支语句

f语句是最简单的条件判断语句,它对某段程序的执行附件一个条件,如果条件成立,就执行这段程序,否则就跳过这段程序去执行下面的程序

if (条件1) 
	{
	  条件为1 true 时执行的代码;
	} 
else if(条件2)
	{
	  条件为1 false、条件2true 时执行的代码;
	}
else
	{
	  条件12均不成立时执行的代码;
	}

switch语句

switch (expression)
{
case label1:
  expression = label1 时执行的代码 ;
  break;  
case label2:
  expression = label2 时执行的代码 ;
  break;
default:
  表达式的值不等于 label1 及 label2 时执行的代码;
}

循环

while循环

while (条件为真) {
  要执行的代码;
}

while语句还有另外一种形式,即do…while。两者的区别在于,do…while要比while语句多循环一次。当while表达式的值为假时,while循环直接跳出循环。而do…while语句则是先执行一遍程序块,然后再对表达式进行判断

do {
    语句块; //不管如何都会先执行一次语句块然后再判断
} while (表达式);

for循环

<?php 
for ($x=0; $x<=10; $x++) 
	{
	  echo "数字是:$x <br>";
	} 
?>

foreach循环

foreach循环只能用于数组

foreach(数组名 as 变量 )
	{
	 循环体
	}
//循环次数由数组决定
//每循环一次会将数组中的元素赋值给后面的变量

foreach(数组名 as 下标变量 => 值变量)
	{	
	 循环体
	}
//可以得到下标和值变量

foreach循环不会对数组本身有影响,只是操作了数组的一个备份,作用域仅在循环里面

日期和时间的管理

1.时区的设置
1)在配置文件php.ini中设置时区
在php.ini中设置时区,需要定位到[date]下的";date.timezone="选项,去掉前面的分号,并设置他的值为当地所在的时区使用的时间
2)通过date_default_timezone_set函数设置时区

date_default_timezone_set(timezone)
timezone:对应的时区

2.时间戳
UNIX系统中,日期与时间表示为自1970年1月1日零点到当前时刻的秒数,这种时间成为NUIX时间戳

  • 获取指定时间的时间戳

PHP中应用mktime()函数将一个时间转换成UNIX的时间戳值

int mktime(int hour,int minute,int second,int month,int day,int year,int[]is_dst)
hour:小时数
minute:分钟数
second:秒数
month:月份
day:天数
year:年份              (时、分、秒、月、日、年)
is_dst:参数is_dst在夏令时可以被设为1,如果不是则设为0,如果不确定是否夏令时则设为-1(默认值)
  • 获取当前时间戳
echo time();
  • 将英文文本的日期时间描述解析为UNIX时间戳
实例

<?php
echo(strtotime("now") . "<br>");// now现在
echo(strtotime("15 October 1980") . "<br>");
echo(strtotime("+5 hours") . "<br>");// 5小时之后
echo(strtotime("+1 week") . "<br>");// 1周以后
echo(strtotime("+1 week 3 days 7 hours 5 seconds") . "<br>");//1周3天7小时5分钟后的时间戳
echo(strtotime("next Monday") . "<br>");//下周1的时间戳
echo(strtotime("last Sunday"));
// 我真的是太喜欢英语蜡
?>

时间戳转换成时间

$time = date('Y-m-d H:i:s' , time());// 前面为时间的格式,后面是获取当前时间戳
echo $time;

在这里插入图片描述

php连接操作数据库

// 数据库连接函数,数据库位置(本机地址)、用户名、密码   
$conn = mysqli_connect('localhost','root','root') or die ('连接数据库服务失败');

// 选择要操作的数据库,这里连接mydb1
mysqli_select_db($conn,'mydb1');
// 设置数据库的编码格式
mysqli_query($conn,'set names utf8');

// 拼写SQL语句(查询表-student里的内容)
$sql = "select * from student";
// 执行SQL语句
$result = mysqli_query($conn,$sql);

// 将执行结果转换为结果集
while($data = mysqli_fetch_assoc($result)){
    var_dump($data);
    echo '<br />';
    echo '<br />';
}

while循环里用echo $data['name'];可以只输出name的内容

文件包含

在一个PHP脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情

四种形式
Include:包含文件
Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)
Require:与include相同,两者报错方式不一样
Require_once:以include_once相同

在这里插入图片描述

实例
假设有一个标准的页头文件,名为 “header.php”。如需在页面中引用这个页头文件,使用 include/require

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<?php include 'header.php'; ?>
<h1>欢迎来到我的主页!</h1>
<p>一些文本。</p>

</body>
</html>

函数

定义方式

<?php
// function关键字  函数名()
function functionName()
{
    // 要执行的代码
    // return值(可以没有)
}
?>

默认值
defult value,指的是形参的默认值,在函数定义的时候就给的一个初始的赋值,如果没有提供实参,形参就会使用这个默认值
需要注意的是,默认值的定义是放在最后面的(多个),不能左边有默认值右边没有

引用传递

实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者常量或者其他表达式)的结果(值)取出来赋试值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。
有的时候,希望在函数内部拿到的外部数据,能够在函数内的部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据房的内存地址。以上这种定义形式叫引用传值

在这里插入图片描述
引用传值传入实参必须为变量

函数体
如果没有明确的return使用,系统默认返回NULL
函数return返回值后,后面的部分都不会再执行

静态变量
在这里插入图片描述

一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来
只要在变量前加上关键字static,该变量就成为静态变量了

作用域

局部区域不能访问全局变量
全局区域也不能访问局部变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
PHP 超级全局变量列表:

$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION

$GLOBALS

PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
一个包含了全部变量的全局组合数组。变量的名字就是数组的键

<?php 
$x = 75; 
$y = 25;
 
function addition() 
{ 
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
 
addition(); 
echo $z; 
?>

运行结果为100
以上实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。

$_SERVER
一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建
参考 菜鸟教程SERVER

$_REQUEST
用于收集HTML表单提交的数据

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

<html>
<body>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>
 
</body>
</html>

$_POST
广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据

<html>
<body>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_POST['fname']; 
echo $name; 
?>
 
</body>
</html>

$_GET
同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。

$_GET 也可以收集URL中发送的数据。

假定我们有一个包含参数的超链接HTML页面:

<html>
<body>
<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>
</body>
</html>

当用户点击链接 “Test $GET”, 参数 “subject” 和 “web” 将发送至"test_get.php",你可以在 “test_get.php” 文件中使用 $_GET 变量来获取这些数据。

以下实例显示了 “test_get.php” 文件的代码:
实例

<html>
<body>
 
<?php 
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
?>
 
</body>
</html>

表单传值

GET传值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
POST传值
在这里插入图片描述
PHP接收数据的三种方式

方式效果
$_GET接收GET方式提交的数据
$_POST接收post方式提交的数据
$_REQUEST接收GET或POST提交的数据

三个都是php超全局预定义数组,表单元素的“name”属性值作为数组的下标,value属性对应的值就是数组元素值(输入值)

REQUEST
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
提交地址为上述代码

文件上传

文件处理
https://www.runoob.com/php/php-file.html

文件上传:
文件从用户本地电脑通过传输方式(Web表单)保存到服务器所在电脑指定的目录下

1、增加文件上传的表单:浏览器请求一个服务器的HTML脚本(包含文件上传表单)
2、用户从本地选择一个文件(点击上传框(按钮) )
3、用户点击上传:文件会通过物联网传输到服务器上
4、服务器操作系统会将文件保存到临时目录:是以临时文件格式保存(windows下 tmp)
5、服务脚本开始工作:判新文件有效
6、服务器脚本将有效文件从临时目录移动到指定的目录下(完成)

在这里插入图片描述
文件上传表单
有关上面的 HTML 表单的一些注意项

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型
在表单需要二进制数据时,比如文件内容,使用 "multipart/form-data"<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理
举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮
<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>

PHP 的全局数组 $_FILES
第一个参数是表单的 input name
第二个下标可以是 “name”、“type”、“size”、“tmp_name” 或 “error”

参数作用
$_FILES[“file”][“name”]上传文件的名称
$_FILES[“file”][“type”]上传文件的类型
$_FILES[“file”][“size”]上传文件的大小,以字节计
$_FILES[“file”][“tmp_name”]存储在服务器的文件的临时副本的名称
$_FILES[“file”][“error”]由文件上传导致的错误代码
<?php
if ($_FILES["file"]["error"] > 0)
{
    echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
    echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>

保存上传文件

移动文件函数的名称是move_uploaded_file()。这个函数通常用于将上传的文件从临时目录移动到永久目录。它的语法如下:

bool move_uploaded_file ( string $filename , string $destination )

其中,$filename是上传文件的临时路径,$destination是文件移动到的目标路径。如果移动成功,函数将返回true,否则返回false。

判断是否为上传文件函数的名称是is_uploaded_file()。这个函数通常用于检查一个文件是否是通过表单上传的。它的语法如下:

bool is_uploaded_file ( string $filename )

其中,$filename是要检查的文件路径。如果文件存在于上传文件夹中,并且是通过表单上传的,函数将返回true,否则返回false。这个函数通常用于验证上传文件的文件类型和大小,以确保上传的文件符合要求

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值