第一个PHP程序
什么是PHP呢?
PHP:Hypertext Preprocessor(超文本预处理器),从超文本、预处理器这些关键词进行分析,可以理解为PHP就是预先处理为超文本的工具。那么是谁,以及在哪里处理成超文本呢?则PHP代表的是在服务器端通过PHP的解析器将嵌入到HTML里面的PHP代码进行预先处理为HTML代码,然后返回给浏览器进行显示。
PHP版本发展历史
PHP主要版本
目前PHP的主要的两个版本为PHP5和PHP7。一般来说生产环境使用的PHP5的比较多,但是由于现在PHP7的性能非常的好,使得很多互联网的企业也慢慢的转向PHP7,例如现在的laravel框架需要使用PHP7的环境才可以运行。
PHP之hello world!-PHP标记
- 创建文件要以 .php 为扩展名
- 文件中的PHP代码要写到 <?php ... ?> 标记之中
- 每个语句要以 ; 结尾
- 在PHP代码中可以输出多余的空格和回车,不会影响程序的运行
- 注意:在标记之外的字符将会原样的输出,PHP引擎也只是选择性的处理,它只处理属于PHP代码的那一部分,那么PHP引擎如何区分哪些代码是PHP代码,此时就需要使用php标记 <?php ... ?>
<?php
echo 'hello world';
?>
注释
注释:不会被执行,用来说明代码的,给程序员看的。
- 单行注释: // 或者 #
- 多行注释: /.../ 一般多行注释也叫作块注释
- sublime里面可以通过 ctrl + / 进行单行注释 ctrl + shift + / 进行块注释
<?php
/**
* 这个是多行注释
* @email gogery@163.com
* @author mark
*/
// 这个是当行注释:PHP是最好的web编程语言
# 这个也是是当行注释:PHP是最好的web编程语言
echo 'hello world';
?>
运行PHP脚本
当我们编写好PHP代码后,如何执行PHP代码呢?
- 在命令行通过PHP可执行命令进行执行
- 通过web服务器的模式进行执行,也就是我们经常说到的wamp或者lamp、以及lnmp架构
命令行运行PHP脚本
- 下载PHP可执行命令
- 将文件解压到一个非空非中文的目录下
- 将PHP执行行命令加入到环境变量
- 命令行执行PHP脚本
常见错误
如果运行php.exe时出现以下错误,说明电脑上缺少一个运行库。
需要从微软的官方网站下载这个软件并安装:
PHP之变量
什么是变量呢?
在进行编程的时候,有一些数据信息需要进行存放,则这个时候我们可以定义一个存储的容器来保存编程过程中的数据信息,则被称为变量。
变量的定义
- 在PHP中一个变量可以直接使用而无须先定义
- PHP中所有的变量以$符号开头
- 变量名可以是数字、字母和_,并且不能以数字开头
<?php
$name = 'andy';
$age = 12;
?>
打印输出变量
如果需要显示一个内容,则需要输出,只有输出之后才能看到
echo
echo:只能输出简单类型的数据:一个数字、字符串...
<?php
$name = 'andy';
$age = 12;
echo $name;
echo $age;
?>
var_dump-print_r
由于echo输出的数据类型有限,对于数组,对象,则无法输出,则需要使用 var_dump、print_r 才可以进行输出
<?php
$name = 'andy';
$age = 12;
echo $name;
echo $age;
?>
可变变量
变量一共由两部分构成:变量的值和变量的名。当一个变量的名还是一个变量的时候,则被称为可变变量。
<?php
$number = [12, 24, 34];
var_dump($number);
?>
数据类型
数据类型简介
PHP中一共有八种数据类型:
- 四种标量类型:字符串、整数、浮点数、布尔类型
- 两种复合类型:array 数组类型、object对象类型
- 两种特殊类型:resource:资源【图片、文件、数据库连接等等】、null:空
数据类型转换
在开发的时候,有的时候可能需要做数据类型的转换,我们需要强制把一个变量从一种数据类型转化成另一种数据类型:
(int):转化成整型
(bool):转化成布尔类型
(float):转化成浮点型
(string):转化成字符串
(array):转化成数组
(object):转化成对象
(unset):转化成null
什么时候有可能会用呢?
答:比如用户注册时需要用户输入年龄,我们接收到用户输入的年龄,我们程序要确定必须是一个数字,这时候我们就可以使用强制类型转化,确保是一个整数,否则在某些情况下会出错!
类型转换规则
字符串转换整数
如果开头的是数字就会转化成这个数字否则就是0
布尔型转整数
true 转 1、false 转 0
字符串转布尔型
空字符串和一个0的字符串 转 false 、 其他情况是 转 true
整数转成布尔型
0 转 false , 非0 转 true
自动类型转换
当不同的数据类型之间进行运算时,PHP会先把数据自动转化成整形再进行运算。
$a = '12abc';
$b = 12;
$a + $b; // 12 + 12
常量
什么是常量?
值不能被修改的量!
语法定义
define( '常量名字' , '值 );
变量和常量的不同:
- 常量前端没有$符号
- 常量只能通过define()赋值
- 常量不存在作用域的问题,在任何地方都可以使用
- 常量一旦被定义不能重新定义或者取消定义
- 常量的值只能是标量【bool,int,float,string】
- 常量名一般用大写
魔术常量
PHP自带一些预定义常量:
__LINE__:代码所在行号
__FILE__:代码所在完整路径和文件名
__DIR__:代码所在文件的目录
运算符
, 逗号运算符
可以使用,号把多个语句放到一条语句,常用场景:
1.定义多个变量
$a=1,$b=2,$c=3,$d=4;
2.输出多个字符串
echo $a,$b,$c;
算术运算符
+、-、*、/、%:加、减、乘、除、求模【取余】
递增递减运算符
比较运算符
>、<、>=、<=、!=或者<>【不等于】、==【等于】、===【恒等】、!==【不恒等】
逻辑运算符
与:&& 或者 and:当所有条件都是true时返回true,只要有一个是false就返回false
或:|| 或者or:只要有一个是true就是true:
非:!:返回是true就false,如果false就是true
异或:xor:两个里面只有一个是true时【一个true一个false时】返回true,否则返回false
字符串运算符
只有一个: . 把多个字符串连接起来!
三目运算符
表达式 ? 语句1 : 语句2; 只表达式为真时,执行语句1,否则执行语句2
赋值运算符
= :把一个值给一个变量
$a = 12;
流程控制
概念
所谓的流程控制,就是程序执行的“路线图”,一般是用相关的语句来控制的!
我们一般是用流程图来描述程序的流程!
流程图基本符号
开始和结束:
流程走向:
语句(块)执行:
条件判断:
输入|输出:
代码执行的三种结构
代码分为三种结构:顺序结构、分支结构、循环结构。
分支结构
单向分支
语法:当表达式的结果为true时,执行大括号中的代码
if(表达式)
{
代码块;
}
例子:
双向分支
语法:当表达式为true时执行代码块1,否则执行代码块2,代码块肯定只会执行其中一个
if( 表达式 )
{
代码块1;
}
else
{
代码块2;
}
多向分支
语法:先判断表达1,如果满就执行代码块1,如果不满足,再判断表达式2,如果满执行代码块3.....,依次判断后面的,只要一个大括号中的代码会被执行!
if(表达式1)
{
代码块1;
}
else if(表达式2)
{
代码块2;
}
else if(表达3)
{
}
switch分支【多向分支】
这个和if..else if..else if..有点像也是多向分支,但是有区别:
1.语法完全不同
2.可以同时执行多个满足条件的代码块,只要不加break
switch(表达式)
{
case 值1:
代码块1;
break;
case 值2:
代码块2;
break;
.......
default:
代码块N;
break;
}
循环结构
for循环
语法:
1.先执行初始值的代码
2.判断表达式是否为true
3.如果为true就大括号中的代码块,否则退出循环
4.代码块的代码执行完之后,再执行自增的代码
5.循环执行以上2~4
for(初始值; 表达式; 自增)
{
代码块;
}
while循环
当表达式为true时执行代码:
while(表达式)
{
代码块;
}
do-wihle循环
语法:先执行一次代码块,然后再判断表达式是否为true,如果为true就再执行代码:
do
{
代码块;
}while(表达式);
foreach循环
遍历数组中每个值:循环数组中每个值,把分别把键和值存到两个变量中:
foreach(数组 as 键名变量 => 值变量)
{
代码块;
}
break、continue
在循环中可以使用break和continue来控制程序的执行
- break:退出整个循环
- continue:退出当前循环进入下一次循环
函数
定义
函数:我们可以把实现一个功能的代码封装到一个函数中,下次再要用到这个功能时只需调用这个函数即可,不用重复写同样功能的代码。
function 函数名( [参数1 , 参数2, 参数3,参数4.......] )
{
代码块;
}
函数调用
一个函数中的代码只有在调用时才会执行。
函数名( [参数列表] ); // 如果函数定义了参数,那么在调用函数时就要依次的传递所有的参数
函数的返回值
在函数内部使用return的用途:退出函数并返回值到调用这个函数的地方
function 函数名( [参数1 , 参数2, 参数3,参数4.......] )
{
代码块;
return 返回值;
}
注意:return只能用在函数内部,用来退出一个函数并返回一个值的,并且return之后的语句不会在执行。
函数参数的默认值
在定义函数时,可以为后几个连续的参数设置一个默认值,调用函数时可以不传带默认值的参数,函数里会使用默认值,如果调用函数时传了参数就使用我们传的参数
参数的按值传递
一般情况下调用函数时传递的参数都是按值传递的
参数的按引用传递
如果在定义函数时,参数前面加上 & ,那么在调用这个函数时,这个参数就是按引用的方式传递的,这时在调用函数时传递的就是一个变量的地址,那么在函数里面如果修改了这个变量,那么函数外部的变量也会被修改
注意:当一个函数的参数按引用传递时,调用这个函数时,参数只能传递变量
变量的作用域
变量作用域分为局部和全局变量:
- 局部:函数内部使用的变量都是局部变量,只能在函数内部使用。
- 全局:函数外部使用的变量就是全局变量,只能在函数外部使用。
global关键字
global:把全局变量引入到函数内部使用,引入之后,如果在函数内部修改了这个变量,那么修改的就是全局变量
局部变量的生命周期
局部变量只在函数内部有效,并且只在调用函数的过程中有效,函数执行完成之后,变量就销毁了,再调用函数又是一个全新的变量
静态局部变量
静态局部变量的特点:这个变量会一直存在于内存中直到脚本执行结束,所以在一个脚本中的多次调用使用的都是同一个变量
注意:static只能用在函数内部定义静态局部变量。
说明:定义静态变量时的赋值只会被执行一次。
可变函数
可以把一个函数的名字保存到一个变量中,然后使用这个变量来调用这个函数
匿名函数
匿名函数:我们可以定义一个没有名字的函数
- 可一个函数保存到一个变量中
- 把一个函数做为参数传到另一个函数中
递归函数
在一个函数内部又调用函数本身的函数就叫递归
垃圾回收机制
什么是垃圾回收机制?
垃圾回收:【GC:Garbage Collection】是指不再被使用的内存【垃圾】不需要程序员写程序来释放清除,系统会自动把不再使用的内存释放掉。
在一些其他语言中比如C、C++,代码申请的内存是一定要调用free方法释放的否则程序出现内存泄漏的错误,这样就加大了开发难度,容易出现错误,垃圾回收机制让程序员无需单独管理内存,降低了开发难度和错误出现的机率,目前很多的高级语言都支持垃圾回收机制比如:PHP,Java等。
总结:在PHP编程时完全不用删除和释放任何资源,只需直接使用变量和资源,PHP会自动把不再使用的内存清除掉,我们不用管:而且当一个PHP脚本执行完之后,这个脚本占用的所有资源也会被释放掉。
什么是垃圾内存?
不再被任何变量指向的内存就是一块垃圾内存,会被系统自动释放。
unset解除变量对内存的引用
可以使用unset来解除一个变量对一个内存地址的引用。