文章目录
- 一、环境安装
- 二、代码应该写在哪里?
- 三、什么是错误?
- 四、变量
- 无需声明变量
- 变量命名规则
- 变量的作用域
- 可变变量
- 五、常量
- 常量的定义
- 常量的特性
- 六、数据类型
- NULL 空值
- Boolean 布尔类型
- Integer 整型
- Float 浮点型
- String 字符串
- Array 数组
- Object 对象
- Resouce 资源类型
- Callback 回调函数类型
- 七、运算符
- 算数运算符
- 逻辑运算符
- 位运算符
- 比较运算符
- 数组运算符
- 赋值远算符
- 递增运算符
一、环境安装
小编学习使用的是php7.4,IDE选择的是 PhpStorm
- Mac下安装Homebrew
- Mac下安装php7.4
- Mac下安装XDebug
二、代码应该写在哪里?
代码必须卸载 <?php
和 ?>
之间,并且php同java一样需要在每个语句后用;
结束指令。php文件默认扩展名是 .php。
<?php
// PHP 代码
?>
当然有个例外,echo 标记可简写 <?=
, 它是更完整的 <?php echo
的简写形式。
<?php echo 'Hello World!';?>
<?= 'Hello World!';?>
不写注释的程序员不是一名好程序员,因为你自己也不能保证一年后你能看懂自己写的代码!所以让我了解一下php中的注视语法吧!
// 这是单行注释 # 这是单行注释 /* 这是一条多行注释另一行也是注释 */
三、什么是错误?
由于代码编写错误,导致程序无法执行的情况,视为错误。
<?phpecho $name;
?>
我们再试图输出一个不存在的变量,发现提示了一堆错误信息。
Notice: Undefined variable: name in /Users/gwh/Documents/yanAn/学习资料/php/BaseStudy/com.gw.study/base/echo.php on line 3
那如何阅读错误信息呢?
Notice
- 错误等级
undefined variable: a
- 意思是 a 这个变量未定义
in /.../echo.php
- 发生错误的文件
- line 3
- 代码的第三行
根据错误的危害程度,PHP将错误分成若干等级!
notice
:提醒,可能有错误warning
:警告,代码有问题,但还可以继续执行parse
:语法解析错误,比如少写了;
号error
:致命错误,程序停止执行常见的有这些,其他错误请自行阅读 官方文档,错误常量
四、变量
变量 是用于存储“数据”的容器(该数据必然是PHP 9种基础数据类型之一),将数据填充到变量的过程,称为赋值。
无需声明变量
php是一门弱类型语言,不需要声明变量的数据类型!运行时php会根据赋值语句自动确定该变量的数据类型。例如:
$name = "HGW"; // $name 变量被自动创建并赋值为 "HGW"
这和java是不一样的,在Java 10及之前的版本中,变量必须显式地声明并指定其类型,然后才能使用。
变量命名规则
- 以
$
符号开始,后面跟着变量名 - 变量名必须以字母或者下划线字符开头
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的(
$y
和$Y
是两个不同的变量)
注意: $this
是一个特殊的变量,它不能被赋值。 PHP 7.1.0 之前,间接赋值(例如通过使用可变变量)是可能的。
变量的作用域
变量的作用域是脚本中变量可被引用/使用的部分。php中有四种不同的变量作用域,分别是:
local
【局部变量】在函数内部定义的变量,只能在该函数内部访问;global
【全局变量】在函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。static
【静态变量】静态变量仅在函数中存在,但当程序执行离开此作用域时,其值并不丢失。
【示例】局部变量 & 全局变量
【示例】静态变量
我们在分别在函数内定义了变量,并且对变量进行累加。我们 $y
仅在第一调用函数时被初始化,之后调用函数都会输出 $y
的值并加一。
对于变量的 static 和 global 定义是以引用的方式实现的。例如,在一个函数域内部用 global
语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。
可变变量
在php中发现一件挺有意思的事,它允许你使用一个变量的值作为另一个变量的名称。这意味着你可以动态地创建或引用变量,使得变量的命名可以在运行时决定。
五、常量
常量 与变量类似,在脚本执行期间该值不能改变。虽然常量是大小写敏感的,但在传统上常量标识符总是大写的~
常量的定义
可以使用 const
关键字或 define()
函数两种方法来定义一个常量
使用
define()
函数定义常量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。
我们创建一个 区分大小写的常量, 常量值为 “Hello world”:
注意:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。
使用
const
关键字定义常量
与 define() 函数不同,const 定义的常量是大小写敏感的。
const 常量名 = 常量值;
常量的特性
常量必须先定义再使用,如果使用了一个未定义的常量,则会抛出 Error。
不变性:一旦定义,常量的值就不能被改变,这与变量不同,变量的值可以在程序运行时被修改;
作用域:常量具有全局作用域,这意味着它们可以在定义之后的任何地方被访问,不受函数或类的限制。
六、数据类型
将数据按照不同的种类,分成不同的“类型”,称之为:数据类型。
我们可以使用
var_dump()
打印变量的相关信息function var_dump(mixed $value, mixed ...$values): void {}
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组和对象将递归展开值,通过缩进显示其结构。
PHP 中的每个表达式都属于以下某个内置类型,具体取决于值。其实原来有8种,在PHP 5.4种新增callback
,至此共9种!
- null 无
- bool 布尔值,只有 true、false 这两个值
- int 整数,正负整数
- float 浮点数,小数
- string 字符串,任何用引号包围起来的字符
- array 数组,一组数据
- object 对象,通过
$object = new 类()
得到的类实例 - resource 资源,比如说连接数据后
- callable 回调函数,较少使用
NULL 空值
该类型的值只有一种,那就是 NULL
或者 null
。注意,和java不一样,空字符串、空对象等并不是NULL。
Boolean 布尔类型
Boolean就非常简单了,使用两个常量并且不区分大小写,被大量应用于各种判断、状态。
-
true
表示真 -
false
表示假
除了 false
之外,以下值也被认为是假
- 整型值
0
(零) - 浮点型值
0.0
、-0.0
(零) - 空字符串
""
- 字符串0
"0"
- 空数组(不包括任何元素的数组)
- NULL(包括尚未赋值的变量)
Integer 整型
整数是一个没有小数的数字,是集合 ℤ = {…, -2, -1, 0, 1, 2, …} 中的某个数。在32位系统下,最大整数为 2147483647
;64位系统下,最大整数为 9223372036854775807
;超出后会变为float 的类型。除了表达十进制外,int还可以用来表达 二进制、八进制、十六进制。
- 八进制:0数值(首字符是零, PHP 8.1.0 之后允许使用
0o
或0O
表示八进制前缀) - 二进制:0b数值(首字符是零,第二个随意大小的x)
- 十六进制:0x数值(首字符是零,第二个随意大小的x)
int没有除法取整运算符,要使用 intdiv() 实现。 1/2
产生出 float 0.5
。 值可以舍弃小数部分,强制转换为 int,或者使用 round() 函数可以更好地进行四舍五入。
要明确地将一个值转换为 int,用 (int)
或 (integer)
强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 int 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成 int 整型。
- NULL会转换为0
- 布尔值中false是0,true是1
- 从浮点数 float 转换成整数int时,将向零取整
- 如果string是数字字符串则直接转换为相关的数字,否则为0
var_dump((int) null);//值为 int(0)var_dump((int) true);//值为 int(1)var_dump((int) false);//值为 int(0)var_dump((int) 1024.00);//值为 int(1024)var_dump((int) 1024.56);//值为 int(1024)var_dump((int)'AB');//值为 int(0)var_dump((int)'123');//值为 int(123)
Float 浮点型
浮点数是带小数部分的数字,或是指数形式。需要注意的:在计算机中,小数点运算存在误差,请小心(比如涉及金额)
String 字符串
字符的范围比较宽泛,无论是数字、字母、各国语言,只要用字符串(''
、""
)包裹起来,它就是字符串类型。其中每个字符等同于一个字节,这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。heredoc和nowdoc语法结构,不常用这里不做讲解~
单双引号的区别
- 双引号:会对转译字符进行解析,如
\n
、\r
、\t
、\v
、\"
……- 单引号:眼见即所得,但会解析
\'
和\\
。
java中拼接文本使用的符号是+
,而php中是通过.
将多个字符串进行拼接。以下示例举出了几种常用的函数,详细见字符串函数
Array 数组
如果说变量是数据的容器,则【数组】就是变量的容器,因为数组可以保存一组数据。即,数组能在单个变量中存储多个值的特殊变量。
定义数组
可以用短数组语法 []
或者 array()
来定义一个数组,如下
$bba=["BMW", "Mercedes Benz","Audi"];
$ev=array("理想", "小鹏","蔚来");
php中数组实际上是一个有序映射,
- 【key】 可以是 integer 或者 string,并且可以混合使用。如果未指定key,将自动使用之前用过的最大int键名加上 1 作为新的键名。如果存在重复key,则覆盖值。
- 【value】 可以是任意类型。key 为可选项。
// 键值对
$ascii = ['a' => 97,'b' => 98,'c' => 99,
];
注意:unset()
函数允许删除array中的某个key,但数组并不会重新建索引。如果需要重建索引,可以用array_values()
函数重建索引。另外,可以通过count()
函数获取数组的长度
Object 对象
更多关于类和对象可以了解类与对象,此处只对Object对象这一数据类型进行讲解。
如何创建一个对象?那当然是 new
一个类而得到,$对象 = new 类();
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例
Resouce 资源类型
Resource 是一个比较特殊的类型,保存了到外部资源的一个引用。Resouce只能有特定的函数返回该类型(详细见附录),开发人员不能手动创建该类型。可以 get_resource_type()
函数返回资源类型。
Callback 回调函数类型
回调函数,如同语意,我们可以通过回调的形式调用其他函数。
那么,为什么不直接调用,而要使用回调呢?比如说,我们需要对一个数组进行遍历和处理并返回一个新数组时
七、运算符
在php中几乎所写的任何东西都是表达式,换句话说"任何有值的东西”都是表达式。它由一个或多个操作数(常量、变量、函数)和运算符组成,用于计算一个值或执行特定的操作。
运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。
算数运算符
- 【+】加,如
$x + $y
表达式值为 x 和 y 的和; - 【-】减,如
$x - $y
表达式值为 x 和 y 的差; - 【*】乘,如
$x * $y
表达式值为 x 和 y 的积; - 【/】除,如
$x / $y
表达式值为 x 除以 y 的商; - 【%】取模,如
$x % $y
表达式值为 x 除以 y 的余数; - 【**】求幂,如
$x ** $y
表达式值为 x 的 y 次方的值;
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。 整数除法可参考 intdiv()。
逻辑运算符
- 【and】和【&&】 与,两边都为真,表达式值为真;
- 【or】和【||】 或,两边都为假,表达式值为假;
- 【!】非,!真 表达式值为假,!假 表达式值为真;
- 【xor】 异或,仅有一边为真,表达式值为真。(和或不一样,或是只要有一边为真值就为真)。
位运算符
- 【&】按位与,对两个操作数的每一位进行比较,如果两位都是1,则结果的对应位为1;否则为0。
- 【|】按位或,如果两个操作数的对应位中至少有一个为1,则结果的对应位为1;否则为0。
- 【^】按位异或,如果两个操作数的对应位不同,则结果的对应位为1;如果相同则为0。
- 【~】按位取反,对操作数的每一位进行反转,即0变为1,1变为0。
- 【<<】左移,将操作数的二进制表示向左移动指定位数,右侧空出的位置以0填充。
- 【>>】右移,将操作数的二进制表示向右移动指定位数,左侧空出的位置根据原数的符号位填充,正数补0,负数补1。
比较运算符
- 【==】等于,值相等则表达式值为真(
5=='5'
表达式值为真); - 【===】全等,值相等且类型相同,表达式值才为真(
5==='5'
表达式值为假)。 - 【!=】和【<>】不等于,值不相等,表达式值为真;
- 【!==】不全等,值不相等 或者 类型不相同,表达式值为真;
- 【>】大于,左边 大于 右边,表达式值为真;
- 【<】小于,左边 小于 右边,表达式值为真;
- 【>=】大于等于,左边 大于等于 右边,表达式值为真;
- 【<=】小于等于,左边 小于等于 右边,表达式值为真;
数组运算符
- 【+】联合,如
x+y
,返回 x 和 y 的合并数组(运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。) - 【==】集合,如
x==y
,如果 x 和 y 具有相同的键/值对,则返回 true - 【===】恒等,如
x===y
,如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true - 【!=】和【<> 】不相等,如
x!=y
,如果 x 不等于 y,则返回 true - 【x !== y】恒等,如
x!==y
,如果 x 不等于 y,则返回 true
赋值远算符
最常用的赋值运算符是=
。它意味着把右边表达式的值赋给左边的运算数。
另外,在=
号前加上算数运算符,那就是算数赋值运算符,如:$x+=$y
就等同于 $x=$x+$y
。位赋值运算符、NULL合并赋值运算符也类似。
递增运算符
- 【++变量】前加,它会先将变量的值增加1,然后返回增加后的值
- 【变量++】后加,它会先返回变量当前的值,然后增加变量的值。
- 【++变量】前减,它会先将变量的值减1,然后返回减后的值
- 【变量–】后减,它会先返回变量当前的值,然后减变量的值。