如何在PHP中使用数字

引言

数字在编程中非常常见。它们用于表示屏幕尺寸尺寸、地理位置、金钱、点数、视频中经过的时间、游戏角色的位置和通过分配数字代码的颜色等内容。

能够在编程中有效地执行数学运算是一项需要开发的重要技能,因为你将经常与数字打交道。虽然对数学的深入理解肯定可以帮助你成为更好的程序员,但这不是先决条件。如果你没有数学背景,试着把数学看作是一种工具来完成你想要达到的目标,是一种提高你逻辑思维的方法。

我们将在PHP中使用两种数字数据类型,整数浮点数

  • 整数,可以是正、负或0,即:(...,-101,...)
  • 浮点数是包含小数点的实数(如9.0-2.25)。

本教程将介绍PHP中可用于数值数据类型的许多不同操作符,以及PHP如何处理"类型杂耍"和内置数学函数。

运算符

运算符 是接受一个或多个值(或表达式,用编程术语来说)并产生另一个值(这样构造本身就成为一个表达式)的东西。操作符用于基本的决策,例如指示程序根据某个值执行某个操作。

赋值运算符

最基本的操作符是赋值操作符 ,一个等号:=。赋值运算符用于设置变量的值。变量就像一个盒子。许多不同的东西可以储存在一个盒子里。额外的项目可以添加到盒子。盒子里的物品可以重新排列,也可以给每个物品贴上标签。盒子也可以清空,新的东西可以添加到盒子里。这正是在代码中使用变量时发生的情况。给变量一个名字,然后给这个命名的变量赋值:

php 复制代码
$box=3;
var_dump($box);
$box="Hello";
var_dump($box);

为了查看变量类型和值,我们使用了var_dump()函数而不是echo。变量$box被赋值为一个值为3的int。然后这个$box变量被赋值为"Hello"。这与清空盒子并添加新东西是一样的。现在,当调用var_dump()函数时,我们得到了关于$box变量值的完全不同的信息:

shell 复制代码
Outputint(3)
string(5) "Hello"

在第一次赋值之后,$box变量包含了整数值3。在第二次赋值之后,$box变量包含了一个匹配"Hello"的5个字符的字符串。

为了让我们的$box更有用,让我们看看下一种类型的操作符。

算术运算符

PHP的算术运算符在计算机程序中的作用与在计算器甚至纸笔上的作用相同。需要注意的重要方面是用于操作的符号。让我们看一下最常见的算术运算符。
加法 (+)即从第一个值开始,将下一个值与该值相加。这可以使用数值本身,也可以使用包含该数值的变量:

php 复制代码
$start=10;
var_dump($start+3);

结果就是这个等式的

shell 复制代码
Outputint(13)

减法 (-)即从第一个值开始,从前一个值中减去或删除下一个值:

php 复制代码
$start=10;
var_dump($start-3);

结果就是这个方程的差值

shell 复制代码
Outputint(7)

乘法 (*)即从第一个值开始,并将其与下一个值相乘:

php 复制代码
$start=10;
var_dump($start*3);

这与第一个数字和第二个数字相加相同:

php 复制代码
$start=10;
var_dump($start+$start+$start);

它们都给出了相同的结果,即方程的乘积

shell 复制代码
Outputint(30)

除法 (/)即第二个值可以与第一个值相乘多少次:

php 复制代码
$start=10;
var_dump($start/3);

结果就是这个等式的

shell 复制代码
Outputfloat(3.3333333333333)

这里的结果是一个浮点数而不是整数,因为10不能整除3。我们可以告诉PHP通过添加(int)来给我们返回整数值,它将忽略.后面的任何值:

php 复制代码
$start=10;
var_dump((int) $start/3);

给出一个整数形式的结果:

shell 复制代码
Outputint(3)

当需要除法方程的剩余值或余数时,称为模运算 (%):

php 复制代码
$start=10;
var_dump($start%3);
var_dump(3%$start);

第一个var_dump给出了前一个除法方程的剩余部分。如果等式颠倒过来,求模会返回' 3 ',因为3除以10等于0,余数是原来的3:

shell 复制代码
Outputint(1)
int(3)

模运算通常用于创建奇数或偶数行的模式。当确定一行的整数计数是奇数还是偶数时,使用%2

php 复制代码
var_dump(10%2);
var_dump(11%2);

偶数的结果总是0,因为偶数能被2整除,而奇数的结果总是1,因为它不能被2整除:

shell 复制代码
Outputint(0)
int(1)

PHP能够快速执行复杂的计算,并提供更多的工具来编写所需的计算。指数、百分比、平方根等操作都是可能的。在介绍这些数学函数之前,让我们先了解另一种运算符,它结合了赋值运算符和算术运算符。

算术赋值操作符

假设有一个篮子,里面有10个苹果。为了在代码中表示这一点,我们可以写$basket = 10。接下来,我们再摘5个苹果,把它们放进篮子。我们可以使用存储在$basket变量中的10的值,而不是整数10:$basket = $basket + 5。虽然这在技术上是正确的,但它相当冗余。我们只想在现有的篮子中再增加5个苹果。这就是算术赋值运算符 的作用。我们可以写$basket += 5,而不是重复这个变量。这和前面的表达式完全一样。

它告诉代码:

  1. $basket的值
  2. 在这个值上加上5
  3. 将新值重新赋给$basket

你可以对其他算术运算符使用相同的原理:

表达式 结果(假设$i = 10)
$i += 5 10 + 5; 结果为: $i = 15
$i -= 5 10 - 5; 结果为: $i = 5
$i *= 5 10 * 5; 结果为: $i = 50
$i /= 5 10 / 5; 结果为: $i = 2

如果Sammy决定吃掉篮子里的一些苹果,我们可以使用类似$basket -= 6的表达式,这将给$basket赋值一个整数9。到目前为止,程序看起来像这样:

php 复制代码
$basket = 10;
$basket += 5;
$basket -= 6;
echo $basket;

当在最后一行回显$basket时,它给出了最终值:

shell 复制代码
Output9

Sammy一次可以吃很多苹果,而我一次只能吃一个苹果。

增量运算符

对于将数字加1,PHP提供了一个单独的递增操作符,它是一个双加号(++)。这可以用于独立地(在单独的一行中)增加变量,也可以直接在表达式中增加变量。让我们回到apple basket的例子,其中$basket变量的当前值是9

php 复制代码
++$basket;
echo $basket;

第一行将当前值9加1,下一行给出结果:

shell 复制代码
Output10

我们可以在一行代码中完成同样的事情:

php 复制代码
echo ++$basket;

首先,它将当前值(10)加1,下一行给出结果:

shell 复制代码
Output11

当再次输出$basket的值时:

php 复制代码
echo $basket;

它证实了$basket变量实际上在上一行中被更新了,而不仅仅是添加到输出结果中:

shell 复制代码
Output11

在前面的每一行中,递增操作符都在变量之前使用。此预递增操作在任何其他操作(例如echo命令)之前应用于变量。使用++$basket等同于编写$basket += 1。递增操作符也可以放在变量之后,作为后递增操作符。当变量被独立设置时,顺序并不重要,但当它被用于表达式中时,顺序就变得重要了。让我们重复这些代码行,只不过这次把递增操作符放在变量后面:

php 复制代码
$basket++;
echo $basket;

第一行将当前值11加1,下一行给出结果。这与前一个例子中递增前的代码行完全相同:

shell 复制代码
Output12

现在我们来看看增量后的差值:

php 复制代码
echo $basket++;

echo操作发生在值递增之前,所以第二次echo的结果仍然显示$basket的值递增1之前:

shell 复制代码
Output12

最后一个echo命令确认在echo被处理后变量实际上被递增了:

php 复制代码
echo $basket;

显示$basket的最终值:

shell 复制代码
Output13

除了递增操作符,PHP还允许我们使用递减操作符通过1递减一个值。

递减操作符

要减少一个值1,我们可以使用递减操作符,它是一个双减号(--)。与自增操作符一样,这个操作符也可以加在变量的前面或后面,但位置可能会影响程序的输出:

php 复制代码
echo --$basket; # Pre-decrement
echo $basket--; # Post-decrement
echo $basket;

第一行在执行echo命令之前将当前值(13)中的1删除。下一行在计算后减值运算符之前执行echo命令,保持输出不变。同样,最后的echo表明$basket的值实际上在前一行中被减少了,给了我们一个减少的值:

shell 复制代码
Output12
12
11

在我们了解运算符优先级如何在结果中发挥重要作用时,请记住运算符的这种顺序。

运算优先级

运算符的优先级指定了它将两个表达式绑定在一起的"紧密程度"。这通常被称为"操作顺序"。这意味着不同的运算符被赋予更大的重要性,并且首先被应用。在计算数学方程时,乘法和除法总是在加减法之前进行。例如:

php 复制代码
echo 1 + 5 * 3;

在这个表达式中,乘法(*)运算符的优先级高于加法(+)运算符,因此首先计算:5 * 3 = 15。然后执行加法运算1 + 15 = 16。这提供了16的最终结果:

shell 复制代码
Output16

如果不遵循运算的顺序,1 + 5会先计算,然后再进行乘法运算,得到6 * 3 = 18

递增和递减操作符不能应用于数字;它们与变量一起使用。然而,我们可以在一个等式中添加变量,在其中增加或减少该值。在使用这些递增或递减的变量时,方程要么在递增或递减操作之前执行,要么在之后执行:

php 复制代码
$my_num = 8;
echo 7 + $my_num++ + 9;
echo $my_num;
echo 7 + --$my_num + 9;
echo $my_num;

在第一个echo行中,在后递增操作符增加$my_num的值之前,使用$my_num的原始值执行数学表达式。就好像我们写了echo 7 + 8 + 9;,得到的结果是24。从第二个echo可以看到,$my_num现在被设置为9。第二个数学方程是在减量操作之后执行的,这意味着$my_num的值现在被设置为8,并且数学方程本身是相同的。在数学方程执行之后,会执行后减量操作符,给出$my_num变量的最终结果:

shell 复制代码
Output24
9
24
8

分组操作

括号总是具有最高的优先级,提供了一种分组操作或强制优先级的方法。例如,给前面的等式加括号:

php 复制代码
echo (1 + 5) * 3;

因为括号中的元素在乘法之前计算,所以结果是不同的:

shell 复制代码
Output18

总结一下数学方程的运算符优先级:

  1. 括号从左到右计算。
  2. 乘法和除法的计算从左到右。
  3. 使用从左到右的加减法计算最终结果。

变量类型变换

在声明或设置变量时,PHP不会定义变量类型。相反,变量的类型是由使用变量的上下文决定的。我们可以使用var_dump()来显示变量的详细信息,包括其类型:

php 复制代码
$my_var = 'string';
var_dump($my_var);
$my_var = 1;
var_dump($my_var);

将字符串赋值给变量时,该变量就变成了字符串。如果将一个整型值赋给同一个变量,它就会变成一个整型:

shell 复制代码
Outputstring(6) "string"
int(1)

PHP还将根据等式的计算值设置类型:

php 复制代码
$var1 = 1.2;
$var2 = 2;
$var3 = 12;
var_dump($var1 * $var2);
var_dump($var3 * $var2);
var_dump($var1, $var2, $var3);

如果有一个操作数是浮点数,那么两个操作数都将被计算为浮点数,结果将是浮点数,如第一个var_dump所示。否则,操作数将被解释为整数,结果也将是整数,如第二个var_dump所示:

shell 复制代码
Outputfloat(2.4)
int(24)
float(1.2)
int(2)
int(12)

从第三个var_dump可以看出,这不会改变操作数本身的类型;唯一的变化是计算操作数的方式和表达式本身的结果类型。

其他数据类型(如字符串和布尔值)也可以转换为数字。这可能会引起很多混乱,所以最好避免使用。尽管PHP将产生一个通知或警告,但它仍然会尽其所能将变量"调整"为可计算的类型。例如:

表达式 返回值 类型变换
2 * false 0 布尔值被转换为整数0
2 * true 2 布尔值被转换为整数1
2 * 'hi' 0 字符串被转换为整数0
2 * '1' 2 字符串被转换为整数1

虽然PHP的松散类型可以使编写代码更快更容易,但它通常使跟踪问题更困难。注意应用程序中使用的变量类型。

数学函数

函数是可以在程序中重复使用的语句块。PHP有许多内置函数,允许我们执行额外的数学计算。

当同时处理正数和负数时,你可以使用abs函数得到数字的绝对值:

php 复制代码
echo abs(-1.3);

这会忽略数字前的+-,只返回数字本身:

shell 复制代码
Output1.3

在使用数字估计或获取浮点数的整数值时,有多种选择:

php 复制代码
echo round(1.3);
echo round(1.5);
echo ceil(1.3);
echo floor(1.5);

round函数将返回最接近的整数,.5计算为更大的数。ceil函数总是向上取整,而floor函数总是向下取整:

shell 复制代码
Output1
2
2
1

任何圆的比值都是相同的。因此,任何圆的周长都可以通过将其直径乘以一个名为pi(π)的特殊数字来确定:

php 复制代码
echo pi();
echo 4 * pi();

PHP中的pi函数返回pi的前14位,因为pi是一个无理数,这意味着它的十进制形式永远不会结束。这个函数可用于计算直径为4的圆的周长:

shell 复制代码
Output3.1415926535898
12.566370614359

无论是抛硬币还是掷骰子,当结果取决于概率时,随机数都是工具。PHP提供了rand函数来返回以下不可预测的随机结果:

php 复制代码
echo rand();

该函数将显示一个介于0和计算机上配置的getrandmax之间的数字。当你需要更少的随机性,或者想增加最大值时,可以同时指定最小值和最大值。要返回一个随机的三位数:

php 复制代码
var_dump(rand(100, 999));

每次调用rand函数,它都会返回一个100到999之间的3位数。

返回随机数的计算实际上不是随机的,因此当涉及安全和密码学时,PHP提供了更加密安全的函数。要生成一个适合于无偏结果的加密随机整数,例如洗牌或抽取中奖号码,请使用random_int函数:

php 复制代码
var_dump(random_int(-999, 999));

使用random_int时,必须指定最小值和最大值。randrand_int都接受负数。

当为可以接受字节字符串的salt、keys或初始化向量生成加密安全的值时,使用指定字符串长度的random_bytes

php 复制代码
var_dump(random_bytes(20));

每次你都会得到一个新的随机字节字符串,看起来像这样:

shell 复制代码
Outputstring(20) "q8?Ud;??W?p4?C????"

总结

本教程涵盖了处理整数和浮点数数据类型时将使用的许多操作符。它还演示了运算符的优先级和位置如何影响结果。这些结果让我们了解了PHP"处理"变量类型和可能导致的问题的方式。最后,对内置函数的简要介绍扩展了应用程序可用的数学选择。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端