第三章 PHP基础语法

了解PHP作者

:::tip
PHP之父:拉斯马斯·勒德尔夫 在1994创建PHP,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。
:::

PHP历史版本

  • 1.0 1995-06-08 – 首次使用

  • 2.0 1997-11-01 – PHP首个发行版

  • 3.0 1998-06-06 2000-10-20 Zeev Suraski和Andi Gutmans重写了底

  • 4.0 2000-05-22 2001-06-23 增加了Zend引擎

  • 5.0 2004-07-13 2005-09-05 ZendⅡ引擎

    • 5.1 2005-11-24 2006-08-24 引入了编译器来提高性能、增加了PDO作为访问数据库的接口
    • 5.2 2006-11-02 2011-01-06 默认启用过滤器扩展
    • 5.3 2009-06-30 2014-08-14 支持命名空间;使用XMLReader和XMLWriter增强XML支持;支持SOAP ,延迟静态绑定,跳转标签(有限的goto), 闭包,Native PHP archives。
    • 5.4 2012-03-01 2015-09-03 支持Trait、简短数组表达式。移除了register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister(), magic_quotes以及session_is_registered()。加入了内建的Web服务器。增强了性能,减小内存使用量。
    • 5.5 2013-06-20 2016-07-10 支持generators,用于异常处理的finally ,将OpCache(基于 Zend Optimizer+)加入官方发布中。
    • 5.6 2014-08-28 2018-12-31 常数标量表达式、可变参数函数、参数拆包、新的求幂运算符、函数和常量的use语句的扩展、新的phpdbg调试器作为SAPI模块,以及其他更小的改进
  • 6.x 未发布 – 取消掉的、从未正式发布的PHP版本。

  • 7.0 2015-12-03 2018-12-03 Zend Engine 3 (性能提升并在Windows上支持 64-bit 整数),统一的变量语法, 基于抽象语法树编译过程。

    • 7.1 2016-12-01 2019-12-01 void返回值类型,类常量,可见性修饰符
    • 7.2 2017-11-30 2020-11-30 对象参数和返回类型提示、抽象方法重写等
    • 7.3 2018-12-06 2021-12-06 PCRE2支持等
    • 7.4 2019-11-28 2022-11-28 改进OpenSSL、弱引用等
  • 8.0
    JIT、数组负索引等
    :::tip
    截止2022年PHP已经诞生27周年啦,php版本和功能一直在更新发展,PHP 7.4每秒处理的请求数量是PHP 5.6的三倍,比PHP 7.0快约18%;PHP 8.0新特性JIT(即时)编译器,这可能为在Web服务器上进行机器学习,3D渲染和数据分析打开大门,未来无限想象…最后最重要的一点是,根据w3c统计,PHP在网站的服务器端编程语言中所占的份额仍然接近79%,并且没有近一步下降,在这方面,社区可以以健康的自信心行事,无需回避与其他语言的比较。至于每年都会冒出诸如“ PHP有未来吗?”,“仍然值得学习PHP吗?”,“ PHP是否失去重要性?”甚至“ PHP即将消亡”之类的问题,我想再去争执已经没有意义,想学习就从现在开始吧!
    :::

  • 10000

  • 15

WEB领域开发语言排行榜

https://w3techs.com/【75%】

PHP入门

掌握标记风格

掌握注释

掌握在PHP脚本中输出内容【HTML CSS JS】

了解HTML嵌入PHP【混编】

PHP数据类型

:::warning

  • PHP是弱类型语音
  • 变量不需要声明就可以直接赋值,值得类型就是变量类型,声明变量不需要声明类型;
  • 声明变量一定是$符号开头;
  • 声明变量名称不能以数字开头,也不能是特殊符号开头,可以是_下划线;
  • 变量区分大小写
  • 变量声明后值得类型可以切换
    :::

PHP数据类型(8)种

标量数据类型【是数据结构中最基本单元,只能储存一个数据】

  • 整型
  • 浮点型
  • 布尔值
  • 字符串

复合数据类型

  • 数组
  • 对象

特殊的数据类型

  • NULL
  • Resource

整型

  • 正负数
  • 最大值PHP_INT_MAX,最小值PHP_INT_MIN,字节数PHP_INT_SIZE
  • 2进制(0b110011)
  • 8进制(012307)不能超过7
  • 16进制(0x09AF)不能超过F

浮点型

  • 小数位
  • 精度
  • 科学计数法 // 3.14e8
  • 不能直接比较
0.1+0.7 和  0.8 比较?
<?phperror_reporting(E_ALL);//设置报错级别$_port =  80;$_port ="80";$_port = true;$_port = [];echo PHP_INT_MAX;//PHP内置魔术常量
echo "<br>";
echo '系统位数:'.PHP_INT_SIZE;$a= 0.1+0.7;$b = 0.8;//if($a === $b){echo '相等';
}else{echo 'No相等';
}$age = 18;
//$age2 = 28;$username = '$age2<h1 style="color:red"></h1>';echo '单引号中有变量'.$username;$username = $age."2<h1 style=\"color:red\"></h1>".$age;echo '双引号中有变量'.$username;

字符串

  • 单引号
  • 双引号
  • 转义字符
  • 单引号双引号区别
  • 字符串连接 .
  • heredoc结构
<?php$age = 18;
$style = <<<ABC<style>body{font: 16px arial,'Microsoft Yahei','Hiragino Sans GB',sans-serif;}h1{margin: 0;color:#3a87ad;font-size: 26px;}.content{width: 45%;margin: 0 auto;}.content >div{margin-top: 200px;padding: 20px;background: #d9edf7;  border-radius: 12px;}.content dl{color: #2d6a88;line-height: 40px;} .content div div {padding-bottom: 20px;text-align:center;}</style>
ABC;
$html =<<<YKH
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>400 错误 - phpstudy</title><meta name="keywords" content=""><meta name="description" content=""><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-capable" content="yes"><meta name="format-detection" content="telephone=no"><meta HTTP-EQUIV="pragma" CONTENT="no-cache"> <meta HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate"> <meta HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> <meta HTTP-EQUIV="expires" CONTENT="0">{$style}
</head>
<body><div class="content"><div><h1>{$age}HTTP 400 - Bad Request</h1><dl><dt>错误说明:因为错误的语法导致服务器无法理解请求信息。</dt><dt>原因1:客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误。</dt><dd>解决办法:</dd><dd>链接中有特殊字符或者链接长度过长导致,请对应修改.</dd><dt>原因2:request header 或者 cookie 过大所引起</dt><dd>解决办法:</dd><dd>crtl+shift+delete 快捷键清除cookie.</dd></dl><div>使用手册,视频教程,BUG反馈,官网地址: <a href="https://www.xp.cn"  target="_blank">www.xp.cn</a> </div></div></div>
</body>
</html>
YKH;
echo $html;

布尔值

  • 特殊值的布尔值【0,0.0,“”,“0”,“0.0”,NULL,“null”】

数组,对象,NULL,Resource

伪类型【了解,看得到官网函数参数的类型要求即可】

  • mixed
  • number
  • void
  • callback

类型转换

自动转换【隐式转换】【逻辑判断时注意或者处理用户数据时注意】

原则:保留更高的精度;

数值转换中遇到非数【0-9】字停止

  • 转为布尔值
$int= 1;
$float= 12.12;
$str1 = "123";
$str2 = 1+"abc123";
$str4 = "123abc";
$bool = "0";//0 0.0 "" "0" "0.0" null,"null" 数组越界
1 +"abc123.88"
if($bool){//
}

强制转换

使用类型函数或者在变量前加括号或者settype

$a = "123hello";
//1
$a = (int)$a; //123
//2
$b = "123hello";
$b = intval($a); //123
//
$c = "123hello";
settype($c,"int"); //123

上周回顾

  • 关于PHP变量下列说法正确的是:

    • A:PHP变量不区分大小写
    • B:PHP变量的名称不能是数字开头
    • C:PHP变量声明时需要指明具体的数据类型
    • D:PHP是弱类型语言,因此变量声明后其值类型不能被改变
  • 关于PHP中字符串说法正确的是:
    • A:PHP字符串可以使用单引号或者双引号,二者没有任何区别
    • B:一般优先使用单引号声明字符串
    • C:字符串中如果存在双引号,一定要使用转义字符\
    • D:字符串中如果存在单引号,可以不要使用转义字符\
$a = 1;$b = "0.68hello";
$c = $a + $b;//
echo $c;//?  1
var_dump($c);//? --------------------[1]-----------------------
$float = 0.0;
$A = (bool)$float;echo $A;//?    var_dump($float);
var_dump($A);//?;------------------[intval()   2]----------------------------------[3]------------------------
$float = 0.0;
$A = settype($float,'bool');
echo $A;
var_dump($float);
var_dump($A);
-------------------------------------------//PHP中标量的数据类型有哪些?

运算规则试题


$a= 0;
$b= 0;
//比较运算符 逻辑运算符 赋值运算符
//短路运算
//$a = true;
//exp1||exp2||exp3 短路
if($a= 3>0 || $b= 3>0){//$a = true;$a++;$b++;
}
echo true;//1
echo false;//'空白'
echo $a,$b;//1 1/**************/$a=5;
//先返回5 再自增6
//先自增7 再返回7
//5+7
$b = ($a++) + (++$a);
则$b的值是___________。$c=5;
$d=6;
$e = ($c==6)&&($d=7);
则,$d的值是__6____
//与运算的短路运算//PHP
$f = 3||(4>3);
var_dump($f);//bool(true)//与JS的区别?
var a = 3||(4>1);
//a = 3

PHP错误级别


PHP程序流程控制

条件控制语句

二者都不考虑数值类型,相当于进行了 == 判断

  • if…elseif…elseif…else
  • switch
$is_handsome = true;//true
$three = false;
//建议不能超过3层嵌套
$is_handsome = 1;
if(){}elseif(){}elseif(){}elseif(){}else(){}
switch($is_handsome){case 3://code.....break;case '1'://code1break;case '2'://code2break;default://code3....
}$is_handsome = 3;
switch($is_handsome){case 1:case 2:case 3://code  break;default://code3....
}

循环控制语句

不要出现死循环