3-php基本语法

第一个PHP程序

什么是PHP呢?

PHP:Hypertext Preprocessor(超文本预处理器),从超文本、预处理器这些关键词进行分析,可以理解为PHP就是预先处理为超文本的工具。那么是谁,以及在哪里处理成超文本呢?则PHP代表的是在服务器端通过PHP的解析器将嵌入到HTML里面的PHP代码进行预先处理为HTML代码,然后返回给浏览器进行显示。

PHP版本发展历史

PHP版本发展史

PHP主要版本

目前PHP的主要的两个版本为PHP5PHP7。一般来说生产环境使用的PHP5的比较多,但是由于现在PHP7的性能非常的好,使得很多互联网的企业也慢慢的转向PHP7,例如现在的laravel框架需要使用PHP7的环境才可以运行。

PHP之hello world!-PHP标记

  1. 创建文件要以 .php 为扩展名
  2. 文件中的PHP代码要写到 <?php ... ?> 标记之中
  3. 每个语句要以 ; 结尾
  4. 在PHP代码中可以输出多余的空格和回车,不会影响程序的运行
  5. 注意:在标记之外的字符将会原样的输出,PHP引擎也只是选择性的处理,它只处理属于PHP代码的那一部分,那么PHP引擎如何区分哪些代码是PHP代码,此时就需要使用php标记 <?php ... ?>
<?php 
    
    echo 'hello world';

 ?>

注释

注释:不会被执行,用来说明代码的,给程序员看的。

  1. 单行注释: // 或者 #
  2. 多行注释: /.../ 一般多行注释也叫作块注释
  3. sublime里面可以通过 ctrl + / 进行单行注释 ctrl + shift + / 进行块注释
<?php 
    /**
     * 这个是多行注释
     * @email gogery@163.com
     * @author mark
     */
    
    // 这个是当行注释:PHP是最好的web编程语言
    # 这个也是是当行注释:PHP是最好的web编程语言
    echo 'hello world';

 ?>

运行PHP脚本

当我们编写好PHP代码后,如何执行PHP代码呢?

  1. 在命令行通过PHP可执行命令进行执行
  2. 通过web服务器的模式进行执行,也就是我们经常说到的wamp或者lamp、以及lnmp架构

命令行运行PHP脚本

  1. 下载PHP可执行命令
  2. 将文件解压到一个非空非中文的目录下
  3. 将PHP执行行命令加入到环境变量
  4. 命令行执行PHP脚本

常见错误

image.png

如果运行php.exe时出现以下错误,说明电脑上缺少一个运行库。
需要从微软的官方网站下载这个软件并安装:


image.png

PHP之变量

什么是变量呢?

在进行编程的时候,有一些数据信息需要进行存放,则这个时候我们可以定义一个存储的容器来保存编程过程中的数据信息,则被称为变量。

变量的定义

  1. 在PHP中一个变量可以直接使用而无须先定义
  2. PHP中所有的变量以$符号开头
  3. 变量名可以是数字、字母和_,并且不能以数字开头
<?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中一共有八种数据类型:

  1. 四种标量类型:字符串、整数、浮点数、布尔类型
  2. 两种复合类型:array 数组类型、object对象类型
  3. 两种特殊类型: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(   '常量名字'  ,   '值  );

变量和常量的不同:

  1. 常量前端没有$符号
  2. 常量只能通过define()赋值
  3. 常量不存在作用域的问题,在任何地方都可以使用
  4. 常量一旦被定义不能重新定义或者取消定义
  5. 常量的值只能是标量【bool,int,float,string】
  6. 常量名一般用大写

魔术常量

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;

流程控制

概念

所谓的流程控制,就是程序执行的“路线图”,一般是用相关的语句来控制的!
我们一般是用流程图来描述程序的流程!

流程图基本符号

开始和结束:


开始和结束

流程走向:


流程走向

语句(块)执行:


image.png

条件判断:


条件判断

输入|输出:


输入|输出

代码执行的三种结构

代码分为三种结构:顺序结构、分支结构、循环结构。

分支结构

单向分支

语法:当表达式的结果为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来控制程序的执行

  1. break:退出整个循环
  2. continue:退出当前循环进入下一次循环

函数

定义

函数:我们可以把实现一个功能的代码封装到一个函数中,下次再要用到这个功能时只需调用这个函数即可,不用重复写同样功能的代码。

function 函数名(    [参数1 , 参数2, 参数3,参数4.......]   )
{
    代码块;
}

函数调用

一个函数中的代码只有在调用时才会执行。

函数名(  [参数列表]  ); // 如果函数定义了参数,那么在调用函数时就要依次的传递所有的参数

函数的返回值

在函数内部使用return的用途:退出函数并返回值到调用这个函数的地方

function 函数名( [参数1 , 参数2, 参数3,参数4.......] )
{
      代码块;
      return 返回值;
}
注意:return只能用在函数内部,用来退出一个函数并返回一个值的,并且return之后的语句不会在执行。

函数参数的默认值

在定义函数时,可以为后几个连续的参数设置一个默认值,调用函数时可以不传带默认值的参数,函数里会使用默认值,如果调用函数时传了参数就使用我们传的参数

参数的按值传递

一般情况下调用函数时传递的参数都是按值传递的

参数的按引用传递

如果在定义函数时,参数前面加上 & ,那么在调用这个函数时,这个参数就是按引用的方式传递的,这时在调用函数时传递的就是一个变量的地址,那么在函数里面如果修改了这个变量,那么函数外部的变量也会被修改
注意:当一个函数的参数按引用传递时,调用这个函数时,参数只能传递变量

变量的作用域

变量作用域分为局部和全局变量:

  1. 局部:函数内部使用的变量都是局部变量,只能在函数内部使用。
  2. 全局:函数外部使用的变量就是全局变量,只能在函数外部使用。

global关键字

global:把全局变量引入到函数内部使用,引入之后,如果在函数内部修改了这个变量,那么修改的就是全局变量

局部变量的生命周期

局部变量只在函数内部有效,并且只在调用函数的过程中有效,函数执行完成之后,变量就销毁了,再调用函数又是一个全新的变量

静态局部变量

静态局部变量的特点:这个变量会一直存在于内存中直到脚本执行结束,所以在一个脚本中的多次调用使用的都是同一个变量
注意:static只能用在函数内部定义静态局部变量。
说明:定义静态变量时的赋值只会被执行一次。

可变函数

可以把一个函数的名字保存到一个变量中,然后使用这个变量来调用这个函数

匿名函数

匿名函数:我们可以定义一个没有名字的函数

  1. 可一个函数保存到一个变量中
  2. 把一个函数做为参数传到另一个函数中

递归函数

在一个函数内部又调用函数本身的函数就叫递归

垃圾回收机制

什么是垃圾回收机制?

垃圾回收:【GC:Garbage Collection】是指不再被使用的内存【垃圾】不需要程序员写程序来释放清除,系统会自动把不再使用的内存释放掉。
在一些其他语言中比如C、C++,代码申请的内存是一定要调用free方法释放的否则程序出现内存泄漏的错误,这样就加大了开发难度,容易出现错误,垃圾回收机制让程序员无需单独管理内存,降低了开发难度和错误出现的机率,目前很多的高级语言都支持垃圾回收机制比如:PHP,Java等。

总结:在PHP编程时完全不用删除和释放任何资源,只需直接使用变量和资源,PHP会自动把不再使用的内存清除掉,我们不用管:而且当一个PHP脚本执行完之后,这个脚本占用的所有资源也会被释放掉。

什么是垃圾内存?

不再被任何变量指向的内存就是一块垃圾内存,会被系统自动释放。

unset解除变量对内存的引用

可以使用unset来解除一个变量对一个内存地址的引用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 1.认识php php是服务端嵌入到HTML中的脚本语言。php的功能包括但不限于: 收集表单数据 生成动态网页 ...
    楠哥哥_0b86阅读 831评论 3 1
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,086评论 4 97
  • 做人如水,你高,我便退去, 决不淹没你的优点; 做人如水,你低,我便涌来, 决不暴露你的缺陷; 做人如水,你动,我...
    温州金诃堂阅读 488评论 0 0
  • 我知道你听过 爱笑的女人,运气都不会差 我还要告诉你 喜欢做饭的人,活的都不差 这无关乎性别,无关乎单身还是已婚 ...
    孩子趣阅读 485评论 2 7