PHP基础语法【上】

news2024/11/24 10:54:08

文章目录

  • 一、环境安装
  • 二、代码应该写在哪里?
  • 三、什么是错误?
  • 四、变量
    • 无需声明变量
    • 变量命名规则
    • 变量的作用域
    • 可变变量
  • 五、常量
    • 常量的定义
    • 常量的特性
  • 六、数据类型
    • 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中的注视语法吧!

// 这是单行注释
# 这是单行注释
/* 这是一条多行注释
    另一行也是注释 */

三、什么是错误?

由于代码编写错误,导致程序无法执行的情况,视为错误

<?php
    echo $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及之前的版本中,变量必须显式地声明并指定其类型,然后才能使用。

变量命名规则

  1. $ 符号开始,后面跟着变量名
  2. 变量名必须以字母或者下划线字符开头
  3. 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  4. 变量名不能包含空格
  5. 变量名是区分大小写的( $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 之后允许使用 0o0O 表示八进制前缀)
  • 二进制: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,然后返回减后的值
  • 【变量–】后减,它会先返回变量当前的值,然后减变量的值。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab复数相关

文章目录 MATLAB复数相关知识相关函数 MATLAB复数相关知识 相关函数 假定存在复数zabi 函数说明real(z)返回复数z的实部&#xff08;a&#xff09;imag(z)返回复数z的虚部&#xff08;b&#xff09;abs(z)返回复数的模即|z| &#xff08; ( a 2 ) ( b 2 ) \sqrt{(a^2)(b^2)…

国内docker镜像加速

自己注册一个阿里云或者华为云的账户&#xff0c;搜索镜像 点击开通&#xff0c;再点击镜像加速器&#xff0c;可以看到自己的加速器地址&#xff0c;然后替换就可以了。再去pull即可成功&#xff0c;但是响应还是要慢一点

神经网络模型---AlexNet

一、AlexNet 1.导入tensorflow库&#xff0c;这里给简称为tf库 import tensorflow as tf from tensorflow.keras import datasets, layers, modelsdatasets&#xff1a;是用于训练和测试机器学习模型的数据集合 layers&#xff1a;是构建神经网络模型的关键组成部分 models&a…

从实例出发,深入探索Java SE中数组的易错点

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

ICMR 2024在普吉岛闭幕,学者与泰国舞者共舞,燃爆全场

惊艳&#xff01;ICMR 2024在普吉岛闭幕&#xff0c;学者与泰国舞者共舞&#xff0c;燃爆全场&#xff01; 会议之眼 快讯 ICMR&#xff08;International Conference on Multimedia Retrieval&#xff09;即国际多媒体检索会议&#xff0c;是一个专注于多媒体检索领域的顶级…

【SkiaSharp绘图05】SKPaint详解(三)之ImageFilter(颜色、组合、膨胀、移位、光照、反射、阴影、腐蚀、变换)

文章目录 ImageFilterCreateColorFilter 颜色滤镜CreateCompose 滤镜组合CreateDilate 膨胀滤镜CreateDisplacementMapEffect 移位映射CreateDistantLitDiffuse 光照CreateDistantLitSpecular 反射光照CreateDropShadow阴影效果CreateDropShadowOnly 只阴影效果CreateErode腐蚀…

大模型基础知识:探索人工智能的巨轮

人工智能大模型&#xff0c;这个在近年来频繁出现在科技新闻和学术论坛的热门词汇&#xff0c;已经成为了推动人工智能技术发展的关键力量。这些大模型&#xff0c;如OpenAI的GPT-3、谷歌的BERT、百度的ERNIE等&#xff0c;以其强大的性能和广泛的应用范围&#xff0c;引起了广…

【STM32】GPIO简介

1.GPIO简介 GPIO是通用输入输出端口的简称&#xff0c;简单来说就是STM32可控制的引脚&#xff0c;STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的GPIO被分成很多组&#xff0c;每组有16个引脚。 最基本的输出…

Flutter 小技巧之面试题里有意思的异步问题

很久没更新小技巧系列了&#xff0c;本次简单介绍一下 Flutter 面试里我认为比较有意思的异步基础知识点。 首先我们简单看一段代码&#xff0c;如下代码所示&#xff0c;是一个循环定时器任务&#xff0c;这段代码里&#xff1a; testFunc 循环每 1 秒执行一次 asyncWorkasy…

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

npm install cnpm -g 报错4048

npm install cnpm -g 报错4048 设置淘宝镜像&#xff1a; 报错如下&#xff1a; 其他博主提供的方法都尝试了&#xff0c;比如管理员权限打开终端&#xff0c;删除.npmrc文件&#xff0c;清除缓存npm cache clean -f等都试了无效&#xff0c;最后怀疑是npm和cnpm版本不对应&…

环境搭建---单机k8s

配置基础环境 关闭防火墙 [rootVM-20-14-centos ~]# systemctl stop firewalld && systemctl disable firewalld关闭selinux [rootVM-20-14-centos ~]# setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config禁止s…

JVM性能优化工具及问题排查

jvm性能优化工具 jdk提供给我们了很实用的工具来分析JVM的状态&#xff0c;线程以及配置&#xff0c;这些工具包含于jdk中&#xff0c;并且以java实现&#xff0c;是JVM性能优化必不可少的工具集&#xff0c;这些工具都在$JAVA_HOME/bin下 jps、jinfo、jstack、jmap、jstat基本…

Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)

文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨…

AI从云端到边缘:人员入侵检测算法的技术原理和视频监控方案应用

在当今数字化、智能化的时代&#xff0c;安全已成为社会发展的重要基石。特别是在一些关键领域&#xff0c;如公共安全、智能化监管以及智慧园区/社区管理等&#xff0c;确保安全无虞至关重要。而人员入侵检测AI算法作为一种先进的安全技术&#xff0c;正逐渐在这些领域发挥着不…

怎样打印微信文档文件?

在日常生活和工作中&#xff0c;我们经常需要打印微信中的文档文件&#xff0c;无论是工作资料、学习笔记还是其他重要信息。随着科技的发展&#xff0c;我们不再需要前往打印店进行繁琐的操作&#xff0c;而是可以通过一些便捷的在线打印平台轻松实现。今天&#xff0c;我们就…

git 快速将当前目录添加仓储

一、进入目录 git init git add . git commit -m "init" git remote add origin http://192.168.31.104/root/AutoBuildDemo.git 二、登录gitlab&#xff0c;创建项目AutoBuildDemo 最后执行&#xff1a; git push -u origin master

【C语言】--- 常见调试信息预处理器宏

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【C语言】--- 常见调试信息预处理器宏 开…

如何用Java SE数组实现高速的数字转换功能

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

技术分析:开源大模型的兴起与热门项目推荐

技术分析&#xff1a;开源大模型的兴起与热门项目推荐 引言 随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;开源大模型成为了许多程序员和研究人员关注的焦点。开源项目不仅促进了技术的快速迭代和普及&#xff0c;还为更多的人提供了学习和实践的机会。…