PHP基础语法【上】

文章目录

  • 一、环境安装
  • 二、代码应该写在哪里?
  • 三、什么是错误?
  • 四、变量
    • 无需声明变量
    • 变量命名规则
    • 变量的作用域
    • 可变变量
  • 五、常量
    • 常量的定义
    • 常量的特性
  • 六、数据类型
    • 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,然后返回减后的值
  • 【变量–】后减,它会先返回变量当前的值,然后减变量的值。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有效招聘营销策略的六个组成部分

任何想吸引更多人购买其产品的公司都必须投资于市场营销。然而&#xff0c;当涉及到让更多的人了解公司的工作时&#xff0c;许多有效的营销活动可能不是招聘团队的首要考虑因素。为了超越招聘委员会上的“发布祈祷”策略&#xff0c;有必要包括有效招聘营销策略的所有组成部分…

Redis 6.0新特性详解

Redis 6.0新特性主要有3个&#xff1a;多线程、Client Side Cache、Acls。下面详细说明一下。 1.多线程 redis 6.0 提供了多线程的支持&#xff0c;redis 6 以前的版本&#xff0c;严格来说也是多线程&#xff0c;只不过执行用户命令的请求时单线程模型&#xff0c;还有一些线…

【Axure高保真原型】动态统计中继器表格项目数

今天和大家分享动态统计中继器表格项目数的原型模板&#xff0c;具体包括以下功能&#xff1a; 表格下方可以自动根据表格内容统计表格的总项目数、启用和禁用数、选中和未选中数 我们可以点击开发切换启用和禁用 点击多选按钮&#xff0c;选中或取消选中对应行内容 选中后可…

跨境电商源码支持,多国语言与货币切换功能全解析

一、背景介绍 跨境电商的兴起&#xff0c;使得供货商和代理商们面临着一个全新的挑战&#xff1a;如何管理跨国交易和多语言 的销售平台。为了解决这一问题&#xff0c;跨境电商源码应运而生。本文将全面解析供货商和代理商后 台所具备的跨境电商源码支持功能&…

环境搭建---nginx

nginx离线安装 下载地址&#xff1a;https://nginx.org/download/ 一、安装编译工具及库文件 [rootVM-20-14-centos ~]# yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel二、安装 PCRE [rootVM-20-14-centos ~]# tar -zxvf pcre-8.35.tar.gz [r…

从热潮到理性,大模型迎来产业「拐点」

前言 无人不谈大模型&#xff0c;是今年上半年科技界的真实写照。 从市场热闹程度来看&#xff0c;大模型已经成为各家科技厂商争先涌入的赛道&#xff0c;无论是互联网巨头&#xff0c;还是科技公司&#xff0c;甚至是研究机构&#xff0c;均已加入这场大模型混战&#xff0…

k8s快速上手实操

前言 Kubernetes&#xff08;简称K8s&#xff09;是由Google开源的一个用于自动化部署、扩展和管理容器化应用程序的系统。自2014年发布以来&#xff0c;Kubernetes已经迅速成长为容器编排领域的标准&#xff0c;并在全球范围内得到了广泛的采用和认可。 Kubernetes作为现代容…

彩色图像批处理实例

在数字图像处理过程中&#xff0c;经常需要对一批图像进行处理&#xff0c;下面以自然场景下花背景分割为例&#xff0c;给出其主要处理过程和处理结果。 处理的主要步骤&#xff1a;1. 六张彩色图像存放在flower文件夹中&#xff0c;图像文件名为1.jpg 2.jpg 3.jpg 4.jpg 5.j…

同三维T80006EHL-4K30CN 单路4K30 HDMI编码器(全国产化)

同三维T80006EHL-4K30CN 单路4K30 HDMI编码器 带1路HDMI环出和1路3.5音频输入&#xff0c;支持4K30&#xff0c;所有元器件全国产 一、 产品简介&#xff1a; T80006EHL-4K30CN 4K编码器&#xff08;采集盒&#xff09;是一款全国产化的专业4K HDMI音视频编码产品&#xff0c;…

开始报名啦!智能可观测运维技术 MeetUp 议题硬核来袭

「龙蜥社区“走进系列”MeetUp」是由龙蜥社区与生态合作伙伴联合主办的系列月度活动&#xff0c;每期走进一家企业&#xff0c;聚焦龙蜥社区和合作伙伴的技术、产品和创新动态&#xff0c;展示硬核技术&#xff0c;共建繁荣生态。 龙蜥社区“走进系列”第 11 期走进中兴通讯-智…

文字转语音在线怎么转?总结了三种快速转换

文字转语音在线怎么转&#xff1f;在数字化信息爆炸的时代&#xff0c;文字转语音的操作也越来越多。无论是为了制作视频配音、播客节目&#xff0c;还是为了方便视力障碍者阅读&#xff0c;文字转语音技术都提供了极大的便利。因此&#xff0c;本文将总结三种文字转语音的在线…

Python热涨落流体力学求解算法和英伟达人工智能核评估模型

&#x1f3af;要点 &#x1f3af;平流扩散简单离散微分算子 | &#x1f3af;相场模拟&#xff1a;简单旋节线分解、枝晶凝固的 | &#x1f3af;求解二维波动方程&#xff0c;离散化时间导数 &#x1f3af;英伟达 A100 人工智能核性能评估模型 | &#x1f3af;热涨落流体动力学…

时隔一年,SSD大涨价?

同样产品&#xff0c;2T&#xff0c;去年400多到手&#xff0c;今年700。 去年 今年

win10重装系统如何操作,附上详细系统重装图文教程(2024年新)

win10重装系统如何操作呢&#xff1f;电脑使用时间长了&#xff0c;会出现各种各样的问题&#xff0c;如重要的系统文件被删除导致电脑无法正常运行&#xff0c;电脑运行内存空间不足&#xff0c;电脑卡顿等。Win10重装系统很简单&#xff0c;这里分享超详细的重装系统方法&…

红日靶场实战一 - 学习笔记

最近在学习红蓝对抗&#xff0c;如果有兴趣的可以多关注。 目录 环境搭建 靶场链接 配置网络 攻击机kali网络 配置win7 web服务器网络 配置winserver 2008网络&#xff08;DC域控&#xff09; 配置win2003/win2k3网路(域成员) IP配置情况 外网突破 信息收集 phpmya…

等待 chrome.storage.local.get() 完成

chrome.storage.local.get() 获取存储处理并计数&#xff0c;内部计数正常&#xff0c;外部使用始终为0&#xff0c;百思不得其解。 如何在继续执行之前等待异步chrome.storage.local.get()完成-腾讯云开发者社区-腾讯云 (tencent.com) 原来我忽略了异步问题&#xff0c;最简…

第二十二篇——香农第二定律(一):为什么你的网页总是打不开?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 看似在将知识&#xff0c;实际是在讲生活和所有&#xff1b;突破边界偶尔…

lotus snapshot 快照列表

快照列表 https://forest-archive.chainsafe.dev/list/mainnet/latest

阿赵UE引擎C++编程学习笔记——C++自定义蓝图函数

大家好&#xff0c;我是阿赵。   使用UE引擎&#xff0c;大部分功能都可以使用蓝图的自带节点去完成。但有时候我们也需要扩展一些蓝图没有的功能。这一篇主要学习一下怎样用C给蓝图新增自定义的函数节点。 一、 新建蓝图函数库 在添加C类的时候&#xff0c;选择蓝图函数库&…

【神经网络】图像的数字视角

文章目录 图像的数字视角引言直观感受内在剖析图像常用函数图像三维层次 经验总结 图像的数字视角 引言 在机器视觉和目标识别领域&#xff0c;需要处理的对象都是图像&#xff0c;但这些领域的模型都是针对数值进行训练的&#xff0c;那么图像和数值之间是什么关系呢?答案是…