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中的注视语法吧!

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

三、什么是错误?

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

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

变量命名规则

  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.mzph.cn/diannao/29652.shtml

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

相关文章

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

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

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

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

【无重复字符的最长子串】

无重复字符的最长字串 一、题目二、解决方法1.暴力解法2.滑动窗口哈希 三、总结1.es6 new set()的用法添加元素add()删除元素delete()判断元素是否存在has 2.滑动窗口和双指针的联系和特点 一、题目 二、解决方法 1.暴力解法 解题思路&#xff1a;使用两层循环逐个生成子字符串…

VMware软件的安装与安装Win10系统

上一篇写了&#xff08;虚拟机&#xff09;VMware软件的安装及Ubuntu系统安装&#xff0c;这次续上部分&#xff0c;安装完Ubuntu系统后&#xff0c;又安装了win10&#xff0c;也记录一下。 事前准备好win10镜像文件&#xff0c;可在微软官网下载 入口地址&#xff1a;软件下…

深入学习Java `synchronized` 关键字

深入学习Java synchronized 关键字 synchronized关键字通过确保在同一时间只有一个线程可以执行某个代码块&#xff0c;从而防止多个线程同时访问共享资源时发生数据不一致的问题。 修饰方法 当synchronized用于修饰实例方法时&#xff0c;表示当前实例对象是同步锁。这意味…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环&#xff0c;开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展&#xff01; 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片&#xff0c;更令人惊喜的是&#xff0c;团队选…

【windows|002】WEB服务和域名介绍

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

【算法与设计】期末总结

文章目录 第一章 概述算法与程序时间复杂性求上界 第二章 递归与分治双递归函数——Ackerman函数分治策略大整数乘法两位两位四位x四位 三位x三位两位x六位 第三章 动态规划矩阵连乘基本要素最优子结构子问题重叠 备忘录 第四章 贪心算法活动安排问题基本要素贪心选择性质最优子…

pg表空间和mysql表空间的区别

一、表空间的定义 1、在pg中表空间实际上是为表指定一个存储的目录。并且在创建数据库时可以为数据库指定默认的表空间。创建表和索引时可以指定表空间&#xff0c;这样表和索引就可以存储到表空间对应的目录下了。 在pg中一个库中可以有多个表空间&#xff0c;一个表空间可以…

6月17(信息差)

1.马斯克最新预测&#xff1a;未来不再需要手机 将被脑机芯片替代 当地时间6月17日&#xff0c;马斯克高仿号“Not Elon Musk”发帖称&#xff1a;“你会在你的大脑上安装一个Neuralink接口&#xff0c;让你通过思考来控制你的新X手机吗&#xff1f;”对此&#xff0c;马斯克本…

yolov10--C#接口

一、前言 本章主要讲解yolov10的C#接口&#xff0c;主要是使用微软开发的openvinocsharp工具加载yolov10模型&#xff0c;并做推理。 二、yolov10模型转换 这里为了演示&#xff0c;使用官方yolov10m模型&#xff08;其他大小的模型同理&#xff09;做演示&#xff0c;可从下方…

游戏服务器研究一:bigworld 开源代码的编译与运行

1. 前言 bigworld 已经开源了它的代码&#xff0c;而我对于大世界的 scale 很感兴趣&#xff0c;所以就尝试把代码跑起来研究。但是&#xff0c;整个过程比我原先预想的复杂得多。 虽然能找到一些官方的帮助文档&#xff0c;但这些文档要么过旧&#xff0c;要么过于详尽&…

【护眼知识】护眼台灯真的有用吗?带你看台灯怎么选对眼睛好

在数字化时代&#xff0c;我们的眼睛无疑承受着前所未有的压力。无论是长时间盯着电脑屏幕&#xff0c;还是沉浸在书本的海洋中&#xff0c;眼睛的健康都成为了我们不容忽视的问题。中国现有约500万盲人&#xff0c;占总人口的0.4%&#xff0c;是世界上盲和视力损伤严重的国家之…

浏览器加速播放视频技巧

当我们看网页中的视频时&#xff0c;想加速播放&#xff0c;但是选项最高只能2倍速时&#xff0c;还想再加快播放如何操作&#xff1f; 此时我们可以按F12打开浏览器开发者选项&#xff0c;然后点击控制台&#xff0c;在浏览器输入如下代码&#xff1a; document.querySelecto…

月薪没到20K,必啃的WebGIS系统技术栈,你练到哪一步了?

WebGIS&#xff08;网络地理信息系统&#xff09;是目前地理信息系统&#xff08;GIS&#xff09;开发的主流&#xff0c;它利用互联网技术来发布、共享和交互地理空间数据。 一个完整的WebGIS项目通常涉及以下几个主要环节&#xff1a;具备一定的理论知识&#xff0c;数据生产…

MAGs培养有线索了?宏组学中未培养微生物表型与培养条件预测

宏基因组测序技术让人们对地球上微生物的多样性有了更深入的了解&#xff0c;但分离培养是研究微生物的生理代谢功能并解析其生态作用的关键。2023年11月的世界微生物数据中心&#xff08;WDCM&#xff09;年会中&#xff0c;全面启动了全球“未培养微生物培养组”计划&#xf…

毕业回家寄大量衣服裤子省钱技巧分享

很多宝子们问我&#xff0c;怎么寄快递更加便宜划算&#xff0c;特别是当你有很多的衣服裤子这类型的衣物的时候&#xff0c;怎么寄件最便宜。 今天分享几个寄快递的省钱方法以及经验分享。 1、惠发快递 像寄包裹快递&#xff0c;可以找快递平台进行下单&#xff0c;这样会更…

【机器学习300问】124、什么是LSTM?LSTM的基本结构是怎样的?

长短期记忆网络&#xff08;LSTM&#xff09;是一种解决隐变量模型长期信息保存和短期输入缺失问题的方法&#xff0c;有趣的是&#xff0c;长短期记忆网络的设计比门控循环单元稍微复杂一些&#xff0c; 却比门控循环单元早诞生了近20年。 一、什么是LSTM&#xff1f; LSMT全…

M41T00串行实时时钟-国产兼容RS4C1339

RS4C1340是一种实时时钟&#xff08;RTC&#xff09;/日历&#xff0c;与ST M41T00引脚兼容&#xff0c;功能等效&#xff0c;包括软件时钟校准。该器件还提供VBAT引脚上的涓流充电能力、较低的计时电压和振荡器STOP标志。寄存器映射的块访问与ST设备相同。涓流充电器和标志需要…

vue+springboot导入Excel表格

1.创建一个excel表格,与数据库需要的表头对应 2.(前端)导入excel的按钮 <template class"importExcel"><el-button type"primary" click"chooseFile">导入<i class"el-icon-upload el-icon--right"></i><…