【教程】PHP快速学习教程(语法篇)

备注

2021/3/6 星期六
很久没写过博客了,发现很多地方用php会很省事,决定学习一下php。写完php语法发现篇幅较长,所以准备再写一个php进阶篇

一、环境搭建

1.phpstudy一键搭建

如果只是简单的学习或者搭建一些小的个人站点phpstudy是一个不错的选择。可以省去很多麻烦的配置而且还可以在各个版本间进行切换。只要搜索并下载phpstudy即可。图形化界面就不多赘述了。注意:安装路径不要有中文或空格。phpstudy

2.apache+php+mysql手动配置

由于apache对php的支持比较容易实现,所以这里选用apache作为web服务器。
首先,自行安装和配置好apache、php和mysql。

<1>apache加载php

我们先找到php的安装目录复制一份php.ini-development并改名为php.ini
顺便查看一下有个叫php?apache?_?.dll的文件,自己看一下自己的几个?都是多少
然后我们进入apache目录找到conf目录下的httpd.conf
找到一大堆LoadModule,在他们后面添加(不要直接复制,根据自己的php版本和安装位置修改)

 LoadModule php?_module 位置/php?apache?_?.dll
 PHPIniDir php安装位置
 AddType application/x-http-php .php

例:D盘下的php7

 LoadModule php7_module D:/php/php7apache2_4.dll
 PHPIniDir D:/php
AddType application/x-http-php .php

<2>php加载mysql

  1. 找到php的目录打开刚刚创建的php.ini文件
  2. 搜索php_mysql.dll ,将;extension=php_mysql.dll前的分号删掉
  3. 再搜extension_dir ,在"ext"中加上php的安装位置
  • 例:extension_dir = "D:/php/ext"

此时配置已经完成,重启apache服务即可。

二、通用基础知识

1.php标记

  • php有多种标记,现在最为常用的是标准标记。<?php 代码?>

还有其他标记形式:

  • ASP标记:<% 代码%>
  • 短标记:<? 代码?>
  • 脚本标记:<script language="php"> 代码</script>

2.注释

与大多数语言相同,单行注释为//和#
多行注释为/**/

3.变量

在php中变量是以$开头作为标识的,命名规则也与大多数语言没有太多区别。在php中不需要单独声明变量,凡是$加合法变量名第一次出现就是变量定义。

4.预定义变量

php为我们提供了很多系统提前定义好的变量(数组),方便我们使用。

$_GET:所有以get提交的数据
$_POST:所有以post提交的数据
$_REQUEST:get和post的所有数据
$_SERVER:服务器信息
$_SESSION:session会话数据
$_COOKIE:cookie会话数据
$_ENV:环境信息
$_FILES:用户上传文件
$GLOBALS:php中的所有全局变量

5.可变变量

在php中如果一个变量中存放的是另一个变量的变量名我们就可以通过再增加一层$符号来直接获取这个变量的内容。
如:

$a=1;
$b='a';
echo $$b;
//输出的结果将会是1

6.引用

和大部分语言一样,php支持&作为引用。
如:

$a=1;
$b=&$a;
//b和a将指向同一个内存

7.常量

php中有两种定义常量的方法
第一种使用函数define(常量名,值)
对于大部分符合变量命名规则的常量可以直接使用
其他情况需要使用constant(常量名)来获取
如:

define('PI',3.1415926);
define('=.=','a');
echo PI;
echo constant("=.=");
//输出结果为3.1415926a

第二种仅在php5.3后才支持,使用和大多数语言同的const标识符定义(变量名前不再需要$)
如:const PI = 3.1415926

8.系统常量

系统提前为我们定义好的一些常量

PHP_VERSION:php的版本号
PHP_INT_SIZE:int的大小(字节)
PHP_INT_MAX:int的最大值

9.魔术常量

php中还有一些会根据环境发生变化的常量,被称为魔术常量,由双下划线开始双下划线结束

__DIR__:当前脚本的在电脑中的绝对路径
__FILE__:当前脚本的在电脑中的绝对路径(带当前文件的名字)
__LINE__:当前所在行数
__NAMESPACE__:当前所属命名空间
__CLASS__:当前所属类
__METHOD__:当前所属方法

10.编译错误

如果一个php文件在编译时产生错误,那么文件中的内容将不会被执行。但是如果存在文件包含,被包含的文件有错误时,只有当代码执行到文件包含的位置时才会报错。

三、数据类型

1.数据类型

php是一种弱数据类型的语言,因此这些数据类型指的并不是变量的类型而是数据本身的类型
总共分为三个大类,八个小类

  • (1)基础类型
    1. 整形(int/integer):4字节表示整数
    整数有时会涉及到进制的转换,这里php为我们提供了相应的函数,十六进制(hex)、十进制(dec)、八进制(oct)、二进制(bin),任意两个组合就是进制转换函数,并且这些函数会自动忽略不符合当前进制的字符,如:十进制转十六进制Dechex();
    2. 浮点型(float/double):8字节表示小数
    由于小数在计算机中的存储方式问题,小数计算可能会出现差错,在任何语言中都会出现,如:2.1/3 == 0.7的结果为false。
    3. 字符型(string):长度不定,表示字符串
    4. 布尔型(bool/boolean):1字节,表示真假(ture/false)
    布尔型无法直接输出,需要使用 var_dump(布尔类型变量) 来输出。
  • (2)复合类型
    5. 对象型(object):存放对象
    6. 数组型(array):存放连续的多个数据
  • (3)特殊类型
    7. 资源型(resource):存放php的外部资源,如:数据库、文件等
    8. 空类型(NULL):NULL,不能参与运算

2.类型转换

(1)自动转换
系统根据需求自行转换,效率低

  • 常见的转换是各种类型转布尔型,在这种转换中php一般遵守将原本语义为空为零的内容转换为假,其余转换为真的原则,具体情况可以查询php官方手册得到。有的时候还会用到isset(),is_null(),empty()这三个函数功能相似但各有不同使用时需要认真思考。
  • 另一种常见的转换是各种类型转数字,布尔转数字真为1假为0,字母开头的字符串为0,数字开头的字符串转换为遇到字母为止的数字,如果遇到多个小数点只取第一个。

(2)强制转换
程序员主动转换,效率高
与自动转换规则相同,但是由程序员手动实现,通过 (数据类型) 的方法实现。
例:

$a = '123abc';
$b = (int)$a;
echo $b;
//输出结果为123

3.类型判断

php提供了大量类型判断的函数为我们提供类型判断的功能,is_数据类型,这类函数的结果都是布尔型
如:

$a = 123;
var_dump(is_int($a));
//输出结果为bool(true)

4.类型更改

类型转换不会改变数据类型本身,只在进行转换时将数据的副本进行了转换,而使用settype(变量,数据类型)则会直接修改变量的数据类型和其中存放的值
例:

$a = 1.23;
echo (int)$a;
echo $a;
//输出的结果是1和1.23
$b= 1.23;
settype($b,'int');
echo $b;
//输出的结果是1

四、运算符

php的运算符与大多数语言相同

  • 赋值运算符(=)
  • 算数运算符
    加(+),减(-),乘(*),除(/),取余(%)
  • 比较运算符
    大于(>),小于(<),大于等于(>=),小于等于(<=)
    等于(==),不等于(!=):数值相同(不同)
    全等于(===),不全等于(!==):数值和类型都相同(有一个不同)
  • 逻辑运算符
    与(&&),或(||),非(!):php中的这些符号具有短路的特性
  • 连接运算符
    连接两字符(.):在java中使用的是+
    连接并赋值(.=):先两字符连接,再赋值给左边的变量
  • 错误控制符(@)
    在可能出错的表达式前加上@,当表达式出错的时候会屏蔽一些不严重的警告信息
  • 三目运算符(?: )
    与大多数语言相同,条件?表达式1:表达式2,条件为真执行表达式1,为假执行表达式2
  • 自增自减运算符
    与大多数语言相同,用++和–进行变量+1和-1操作,且位于变量前先增(减)再运算,位于变量后先运算再增(减)
  • 位运算符
    与大多数语言相同,按位与(&),按位或(|),按位非(~),异或(^),左移(<<),右移(>>)

五、结构控制

1.if分支

php是顺序执行的语言,想要进行分支需要使用if语句,格式与大多数语言相同

//简单if语句
if(条件){语句}//条件成立直接该语句,不成立则跳过
//if else结构
if(条件){语句}	//条件成立直接if后的语句
else{语句}		//不成立执行else后的语句
//if else嵌套
if(条件){语句}		//条件成立执行对应语句
else if(条件){语句}	//否则继续判断直到成立或语句结束
else if(条件){语句}

2.switch分支

php也提供了switch语句

switch(变量){
	case1:语句 break;
	case2:语句 break;
	...
	default:语句
}

3.for循环

最常用的循环结构

for(初始化语句;条件判断;增量语句){
	循环体
}

while和do while循环

while(条件){
	循环体
}
//do while会先无条件执行一次循环体
do{
	循环体
}while(条件);

4.foreach循环

php中提供了快速遍历数组的循环结构foreach

foreach($数组名 as $变量名){
//或foreach($数组名 as $下标名 => $变量名)同时获得下标和变量的值
	循环体
}

5.循环控制

与大多语言相同php提供了break和continue语句,用于跳出循环,break可以结束整个循环,continue可以跳过一次循环
但是与其他语言不同,php中break和continue后可以跟一个整数用来跳过一定层数的循环

while(1){
	while(1){
		while(1){
			break 3; //直接跳出三层循环
		}
	}
}
echo "OK";
//输出OK
for($i = 1; $i <=2 ; $i++){
    echo '1';
    while(1){
        echo '2';
        continue 2; //跳过两层循环
        echo '3';
	}
    echo '4';
}
//输出结果为1212

6.替代语法

由于php经常要和html进行混编,所以php中还提供了一些书写更为好看的语法
这些语法是针对if,switch,for,while,foreach的大括号的
可以将他们的{替换为:
{替换为endxxx,例:

<?php for($i=1;$i<=10;$i++): ?>
html代码
<?php endfor; ?>

六、数组

1.定义

与c语言,java不完全相同php中的数组定义使用了关键词的方式,array(变量,变量,...,变量),除此之外还提供了一种使用中括号的方式定义数组[变量,变量,...,变量],同时他也支持像c语言一样的中括号下标的形式定义数组$变量[下标]=值,php中的下标可以是字符串。

在php中也有多维数组,一般使用如下格式来定义

$变量 = array(
	array('键'=>'值','键'=>'值',...,'键'=>'值'),
	array('键'=>'值','键'=>'值',...,'键'=>'值'),
	...
	array('键'=>'值','键'=>'值',...,'键'=>'值')
);

php中数组的访问方式与c语言一样,使用中括号加下标的形式

2.遍历

  • 如果数组的下标是规律的数字可以使用for循环,php提供了count(数组)函数获取数组元素个数
  • 另外php还提供了each()函数来遍历获取数组的值,each函数会返回一个有四个元素的数组,并将元素指针后移,如果数组已经被遍历完,each会返回false,四个元素分别是
0和key:元素下标
1和value:元素的值
  • php中还提供了一个list结构来获取下标是规律数字的数组的值list($变量,$变量,...,$变量)=$数组,list会将数组中的值依次赋给每一个变量,很多时候配合each使用
while(list($key,$value) = each($数组)){
	循环体
}

3.常用数组函数(排序)

php为我们提供了很多方便数组操作的函数

//排序类
sort(),rsort():顺序和逆序排序,不会保留键值对应关系
asort(),arsort():顺序和逆序排序,会保留键值对应关系
ksort(),krsort():按键名排序,会保留键值对应关系
shullfe():随机打乱数组元素
//指针类
reset(),end():将数组指针置于数组首或末位置
next(),prev():将数组指针向后或前移动一位
current(),key():返回当前指针所指元素的值或下标
//其他
array_push(),array_pop():在数组尾部添加或取出元素
array_shift(),array_unshift():在数组首部添加或取出元素
array_reverse():将数组元素倒置
in_array():判断数组中是否存在一个元素
array_keys(),array_values():获取数组中所有的下标或值

七、字符串

1.定义

php中的字符串可以使用单引号也可以使用双引号包裹,但是这种字符串没有结构并且不能超过一行
php还提供了nowdoc代表没有单引号的单引号字符串,heredoc代表没有双引号的双引号字符串。这两种形式的字符串在定义时使用标识符

//nowdoc
<<<'EOD'	//上边界符
字符串的内容
EOD;		//下边界符
//heredoc
<<<EOD		//上边界符
字符串内容
EOD;		//下边界符
//上边界符所在行后不能跟任何内容,下边界符号必须顶头写
//在边界符内的所有内容都会被当作字符串本身(注释也会被输出)

另外,在php中使用单引号的字符串只能识别转义字符\‘(其他转义字符都会被直接输出而不进行转义),在双引号字符串中则只不识别转义字符\’,(其他转义字符都会被转义后再输出),双引号还可以解析$开头的变量,直接输出变量解析后的内容。

2.长度统计

php为我们提供了strlen()函数按字节统计字符串长度,但是对于中文等字符集并不适用,所以php中还提供了一组扩展mbstring(Multi Bytes String),这个扩展默认关闭,我们需要手动子php.ini中开启(搜索mbstring,去掉行前的分号重启服务器即可),开启后可以使用mb_strlen(字符串,‘编码格式’)获得对应编码的正确字数。

3.字符串常用函数

php为我们提供了很多和字符串相关的函数

implode('格式',数组):将数组按一定格式(逗号空格等)连接成一个字符串
explode('分隔符',字符串):将字符串按一定格式(遇到分隔符就分割)进行分割成一个数组
str_split(字符串,长度):按长度分割字符串成一个数组
trim(字符串,字符):循环去除字符串两边的指定字符(不填默认为空格)
ltrim(),rtrim():与trim基本相同,去除字符串左和右的字符
substr(字符串,,):从字符串指定位置截取指定长度的字符
strstr(字符串,匹配字符):从第一次匹配到指定字符截取到字符最后
strtolower(),strtoupper():字符串全转小写或大写
ucfirst():字符串首字母大写
strpos(),strrpos():返回字符串中指定字符的第一次或最后一次出现的位置(找不到返回false)
str_replace('匹配字符','替换字符',字符串):将字符串中的匹配字符替换成替换字符
printf(),sprintf():格式化输出,基本和c语言相同,但提供了更多的占位符
str_repeat('内容',次数):将字符重复输出
str_shuffle():将字符串随机打乱

八、文件包含

1.原理方法

php为我们提供了两类文件包含函数include,include_once和require,require_once。

  • 文件包含函数有两种使用方式,使用括号时include();和使用引号include '' ;
  • 没有once的函数每次遇到都会将被包含的文件包含一次,有once的函数系统会自动判断文件是否已经被包含过,如果被包含过将不会被包含,保证只文件只被包含一次。
  • include和require的区别是,include包含的内容出错时会发出两条warning,并不影响其他代码执行,require的内容出错时,会产生一个warning和一个eror,且require后的代码全都不再执行

文件包含的两种形式:

  • 向下包含
    使用被包含文件中的内容,先包含后使用。
  • 向下包含
    把本文件中的内容给其实文件使用(显示),先准备内容再给其他文件使用。

系统会将被包含的文件中的内容引用到当前位置,包含函数在哪使用文件里的内容就被引用到哪里。但是被包含的文件会被单独编译。

2.路径

php有两种路径,相对路径和绝对路径,绝对路径又分两种,本地绝对路径和网络绝对路径,本地绝对路径是从盘符(Windows下)或者根目录(Linux下)开始的,而网络绝对路径是从当前网站的主机文件夹开始的;相对路径是以./(当前目录)或者…/(上一级目录)开始的。
绝对路径效低,路径不易出现问题,安全性高;相对路径效率高但是容易出错,在嵌套包含的时候容易出现文件的相对位置改变。

九、函数

1.格式

与c或java这些强类型的语言不同,php的函数不以函数返回值为标志,而是直接使用关键词function,其格式为:

function 函数名(参数列表){
	函数体;
	return 返回值;	//对于没有返回值的函数可以没有return语句
}

php的函数执行不在编译阶段而在代码执行阶段,在碰到函数调用时才会执行。
且只要系统能找到所需的函数定义就可以执行,函数调用可以在函数定义之前。

2.参数

在php中函数定义时的参数列表成为形参,实际执行时传入的值称为实参

  • 默认值:我们可以给参数列表中的参数设置默认值,存在默认值的参数,在调用时省略这个参数,而直接使用默认值。默认值的设定需要从又向左依次设定。
  • 传参:在传参时一般都是将实参的值复制一份给形参,形参只是实参的一个副本与实参再无任何关系。有的时候我们需要形参就是实参本身(如:改变实参的值),那么就要在函数定义时使用引用&传参,且在传参时必需传入变量。

例:

function fun(&$a,$b,$c=0){
//想要修改a的值需要传引用,给变量赋默认值必须从右向左依次赋值
	$a=1;$b=1;
	echo $a+$b+$c;
}
$x=5;$y=3;$z=1;
fun($x,$y,$z);
//输出结果为3,且x的值变为1,y的值还是3
fun($x,$y);
//输出结果为2,形参c有默认值传参时可以省略

3.return

在php中return除了可以用来结束函数调用还可以用来结束php文件,我们可以把一个文件视为一个函数,php允许我们直接调用return结束一个文件中的代码,并且在这个文件被包含时也会奖return的内容反回给文件包含函数。
例:

//文件test1.php
	echo 'abc';
	return 'xyz';
	echo '123';

//文件test2.php
	$a = include 'test1.php';
	//输出abc
	echo $a;
	//输出xyz

4.作用域

在php中存在三种作用域,全局变量,局部变量和超全局变量。函数内定义的变量叫局部变量,函数外定义的叫全局变量,在函数内无法访问全局变量,在函数外也无法访问局部变量,由系统提供的在任何位置都可以访问的变量叫超全局变量(如:$GLOBALS),我们所有定义的全局变量都会自动被放入$GLOBALS中,当我们遇到局部变量和全局变量重名时可以使用$GLOBALS[‘变量名’]的方式来获取全局变量。如果我们在函数内部再定义函数,也会由于变量作用域的原因使内部函数无法访问外部函数中的变量,这时我们可以使用use()来解决。如:

function fun1(){
	$a = 1;
	function fun2() use($a){
		echo $a;
	}
}
//输出结果为1

5.global关键词

想要在函数内部获取全局变量除了使用$GLOBALS,函数传参这两种方式外,还可以使用global关键词,当我们在函数内部使用关键词global定义变量时,如果变量在全局变量中存在系统会将函数内部定义的变量直接指向外部的变量,如果不存在则会在全局创建。
但是我们一般不会使用这种方式。

6.静态变量

我们知道局部变量的生存周期是从一个函数被调用创建到函数结束被销毁,所以当我们想要做的变量跨函数共享数据的时候就需要用到static修饰的静态变量,使用static修饰的局部变量不会随函数结束而销毁。

7.可变函数

与可变变量类似,如果一个变量中的值恰好是一个函数的函数名时,我们可以直接使用、$变量加括号的形式调用这个函数。如:

function fun(){
	echo 'a';
}
$var = 'fun';
$var();
//输出结果为a

这样我们在函数传参时可以将一个函数作为参数传给另一个函数,实现函数功能的复用。

8.匿名函数

可以直接使用function(参数列表){}的形式来定义匿名函数,也可以在定义时将匿名函数赋值给一个变量,然后通过可变函数的形式来调用这个匿名函数。

9.常用系统函数

php为我们定义了许多系统函数方便调用

1.print():echo相同,使用时也可以不加括号,有函数返回值输出成功时返回1
2.print_r():var_dump()相似,但不会输出变量的类型
3.data('占位符',):按指定格式输出时间,与c语言的printf类似
	常见占位符有Y()m()d()H()i()s()4.time():返回当前时间戳
5.microtime():返回微秒数和当前时间戳
6.strtotime():将任何正确格式的时间转换为时间戳(格式自行查找)
7.数学函数:max(),min(),rand(),mt_rand(),round(),ceil(),floor(),abs(),pow(),sqrt()
最大最小值,随机数(两函数用法相同mt效率更高),四舍五入,向上向下取整,绝对值,求幂,开平方
8.function_exists(函数名):判断函数名对应的函数是否存在
9.func_get_arg(位置):获取函数指定位置上的实参的值(位置从左到右从0开始编号)
10.func_get_args():获取函数所有实参的值,返回一个数组
11.func_num_args():获取实参列表的变量个数

十、异常处理

1.错误代码

程序中的错误主要有三种,编译错误,运行时异常和逻辑错误。php将错误代码定义成了系统常量称为错误代码。

1.E_PARSE:编译错误,代码不会执行
2.E_ERROR:运行时错误,代码会停在报错的位置不再向下执行
3.E_WARNING:警告,不影响代码执行,但可能出现意外情况
4.E_NOTICE:通知,不影响代码执行
5.E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE:用户错误,自定义错误时使用
6.E_ALL:所有错误

想要主动发出错误提示可以使用trigger_error('错误提示',错误代码)函数。(但是这种函数不会阻止系统发出错误提示)

2.错误显示

  • 文件方式:在php.ini中存在几个错误控制的配置项
Display_errors:设置错误是否显示
Error_reporting:设置显示什么级别的错误
//在这些配置的上下文会有如何配置的说明
  • 脚本方式:在php也有几个错误控制函数
Error_reporting():设置错误显示等级
ini_set('配置文件',):用来在函数中临时修改配置文件中的某一项的值
//一般都是在脚本中进行错误控制

3.错误日志

由于在实际生产环境中一般不会显示错误信息,但是又需要将遇到的错误报错下来,我们就会使用日志。只要在php.ini文件中做修改即可。

log_error:是否开启错误日志
error_log:日志保存的路径(包含日志文件名)

4.自定义错误

php为我们提供了自定义错误的机制,我们需要按照一定格式定义一个错误处理函数,函数至少要有两个形参,第一个是$errno错误代码,第二个是$errstr错误信息(这两个变量不一定要用这个变量名),其他的参数是可选参数,可以查阅php的error_handler获得。构造好之后可以使用set_error_handler()调用。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于快速掌握Matlab的基础语法,你可以按照以下步骤进行学习: 1. 安装和启动Matlab:首先确保你已经安装了Matlab,并成功启动了它。 2. Matlab的工作环境:了解Matlab的工作环境,包括命令窗口、编辑窗口和工作空间。 3. 基本数学运算:熟悉Matlab中的基本数学运算,如加法、减法、乘法和除法。还有一些常用的数学函数,如sin、cos和sqrt等。 4. 变量和赋值:学习如何在Matlab中创建变量并进行赋值。了解变量的命名规则和一些注意事项。 5. 数组和矩阵操作:掌握Matlab中的数组和矩阵操作,包括创建数组、索引和切片操作、矩阵运算等。 6. 控制流程语句:了解Matlab中的控制流程语句,如条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)等。 7. 函数和脚本文件:学习如何定义和调用函数,在Matlab中编写脚本文件,并了解函数和脚本文件之间的区别。 8. 图形绘制:掌握Matlab中的图形绘制功能,包括绘制二维和三维图形、设置坐标轴和标签、添加标题等。 9. 文件操作:了解如何在Matlab中读取和写入文件,如文本文件、Excel文件和图像文件等。 10. 调试和错误处理:学习如何调试Matlab程序,并处理可能出现的错误和异常。 以上是一个快速掌握Matlab基础语法的步骤,你可以通过阅读Matlab的官方文档、参考书籍或在线教程来深入学习每个方面。不断练习和实践,才能更好地掌握Matlab的基础语法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值