PHP基础语法(一)

一、初步语法

1、PHP代码标记:以 <?php 开始,以 ?> 结束;

2、PHP注释行注释://(双斜杠)或#      块注释:/* */

3、PHP语句分隔符:

1)在PHP中,代码以行为单位,系统需要通过判断行的结束,通常都用;(英文状态下)表示结束。
说明:PHP中标记结束符?>有自带语句结束符的效果,最后一行PHP代码可以没有语句结束符“;”。
2)PHP中很多代码的书写并不是全嵌入到HTML中,而是单独存在,所以可以不使用标记结束符?>,PHP会自动从开始到最后全部认为是PHP代码,从而解析。

二、变量

1、变量是用来存储数据的; 2、变量是存在名字的;
3、变量是通过名字访问数据的; 4、变量的数据是可以改变的。

变量的使用

1、定义:在系统中增加对应的变量名字(在内存中开发一块地)
2、赋值:将数据赋值给变量(在定义时直接初始化)
3、可通过变量名访问数据
4、变量可从内存中删除
变量命名规则

1、变量名字必须以"$"开头;
2、变量名可由数字、字母、下划线命名,但必须以字母和下划线开头;

3、允许中文变量;(不建议)

// 定义时不需要关键字,但必须使用$符号
$var1;
$var2 = 1;
echo $var2; // 访问变量,通过变量名找到数据,并显示
$var2 = 2; // 修改变量
echo '<hr/>',$var2; // 'hr' 为下划线,分隔符
unset($var2); // 删除变量,从内存中剔除
echo $var2; // 此时会报错,因为不存在变量

预定义变量

即提前定义的变量,由系统定义的变量,存储许多要用到的数据(预定义变量都是数组)。

  1. $_SERVER

    • 包含服务器和执行环境信息的数组,例如 HTTP 头、路径、脚本位置等。
  2. $_GET

    • 包含通过 URL 参数传递给当前脚本的变量的数组。
  3. $_POST

    • 包含通过 HTTP POST 方法传递给当前脚本的变量的数组。
  4. $_REQUEST

    • 包含了 $_G​ET、$_POST 和 $_COOKIE 的内容的数组。不建议过度依赖,因为它可能包含未预期的数据,尤其是在处理表单数据时。
  5. $_SESSION

    • 包含当前会话中的会话变量的数组。需要先调用 session_start() 函数开启会话。
  6. $_COOKIE

    • 包含通过 HTTP Cookies 传递给当前脚本的变量的数组。
  7. $_FILES

    • 包含上传文件的信息的数组。这个变量由文件上传的表单使用。
  8. $_ENV

    • 包含环境变量的数组。
  9. $_GLOBALS

    • 包含了全部变量的全局作用域数组,变量的名称就是数组的键。

可变变量
如果一个变量保存的值刚好是另外一个变量的名字,则可直接通过访问一个变量得到另外一个变量的
值:但需在变量前多加一个$符号

$a = 'b'; // a变量的内容正好是b变量的名称,故称a为可变变量
$b = 'bb';
echo $$a; // 使用时需加一个$符号

变量传值
将一个变量赋值给另一个变量:值传递引用传递
值传递:将变量保存的值复制一份,并将该值给另外一个变量保存(两个变量无关系)

// 值传递
<?php
// 2.1 执行此行,在栈区开辟一块内存存储$a,在数据段中开辟一块内存保存值1。然后将1所在位置赋值
//给a变量
$a = 1;
// 2.2 栈区开辟存储$b;发现是赋值运算,故会取出$a的值,
// 并在数据段重新开辟一块内存并保存,且再把新开辟地址赋值给栈区的变量b
$b = $a; // 值传递
// 2.3 执行该行
$b = 2;
echo $a,$b;//a=1,b=2


引用传递:将变量保存值所在的内存地址传递给另外一个变量,两个变量同指一块内存(名字不一样而已),可以通过在函数定义时在参数前面加上 & 符号来指示参数是引用传递的。

通常情况下,PHP 函数中的参数是通过值传递的,这意味着函数内部对参数的修改不会影响到函数外部的变量。但是,通过引用传值,函数可以直接修改调用者传递的变量本身,而不是变量的副本。

function increment(&$value) {$value++;
}$num = 5;
increment($num);
echo $num;  // 输出 6
/* $num 是一个普通的变量,但是当它作为 increment 函数的参数时,前面的 & 符号表示这是一个引用传递的参数。因此,函数内部对 $value 的增加操作直接影响到了函数外部的 $num 变量,使得 $num 的值变为 6。 */

常量

常量的基本概念
const/constant:是在程序运行中,不可改变的量(数据);常量一旦定义,通常不可更改。

定义方式
1、使用定义常量的函数:define('常量名',常量值)——类似于c++的 #define
2、const

<?php
// 使用函数定义常量
define('PI',3.1415); // 注意此处与c++不同,#define 为预处理命令,宏定义,无需加;。
// 使用const关键字定义
const PI = 3;
// 定义特殊常量
define('^-^','smile');
// const ^-^ // 报错
// 访问常量
echo PI;
// echo ^-^ // 报错
constant('^-^'); // 特殊常量的访问,加引号
// 系统常量
echo '<hr/>',PHP_VERSION,'<br/>',PHP_INI_SIZE,'<br/>',PHP_INI_MAX; // 有符号整形
// 魔术常量
echo '<hr/>',__DIR__,'<br/>',__FILE__,'<br/>',__LINE__;
echo __LINE__; // 输出的行数会变

常量命名规则:
1、常量不需要使用"$"符号,一旦使用被认为是变量;
2、变量名可由数字、字母、下划线命名,但必须以字母和下划线开头;
3、常量的名字通常是以大写字母为主(与变量以示区别);
4、常量命名的规则比变量要松散,可以使用一些特殊字符(该方式只能使用define定义);
5、定义常量通常不区分大小写,但可以区分(define函数的第三个参数);

系统常量
魔术常量:由双下划线+常量名+双下划线组成,其值会随着环境变化而变化,用户无法改变。

echo "当前文件路径:" . __FILE__; // 输出当前文件的路径和文件名
echo "当前行号:" . __LINE__; // 输出当前行号
echo "当前函数名:" . __FUNCTION__; // 如果在函数内部使用,则输出当前函数名
echo "当前类名:" . __CLASS__; // 如果在类内部使用,则输出当前类名
echo "当前命名空间:" . __NAMESPACE__; // 如果在命名空间内部使用,则输出当前命名空间

数据类型

数据类型:data type,在PHP中指的是数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。

基本数据类型:

  1. 整数(Integer)

    • 表示整数值,例如 42 或 -123.
  2. 浮点数(Floating point numbers)

    • 表示带有小数点的数值,例如 3.14 或 -0.001.
  3. 字符串(String)

    • 表示文本数据,可以使用单引号 ' 或双引号 " 包裹,例如 'Hello, World!'.
  4. 布尔值(Boolean)

    • 表示逻辑值,可以是 true 或 false.
  5. 空值(Null)

    • 表示一个变量没有值,使用关键字 null 表示。

复合数据类型:

  1. 数组(Array)

    • 用于存储多个值的有序集合,可以是索引数组(按数字索引)或关联数组(按字符串键索引)。
  2. 对象(Object)

    • 表示自定义数据结构,通过类实例化得到,包含属性和方法。

特殊数据类型:

  1. 资源(Resource)

    • 表示外部资源(例如数据库连接、文件句柄等),由一些 PHP 函数返回。
  2. 回调类型(Callable)

    • 表示可以被调用的函数或方法。

伪类型:

  1. mixed

    • 表示可以是多种不同类型的值。
  2. void

    • 表示没有返回值的函数的返回类型。

类型转换:

PHP 是一种弱类型语言,意味着在大多数情况下,它会自动转换变量的类型以匹配操作的要求。例如,将字符串 "123" 转换为整数 123,或者将整数 456 转换为字符串 "456"

类型检测和转换函数:

PHP 提供了一些函数来进行类型检测和类型转换,如 is_int()is_string()(int)(string) 等,用于检查变量的类型或者强制类型转换。

转换说明:
1、以字母开头的字符串,永远为0;
2、以数字开头的字符串,取到碰到字符串为止。(不会同时包含两个小数点)


$a = 'abcd1.1.1';
$b = '1.1.1abc';
// 自动转换。算术运算,系统先转化为数值类型,然后运算
echo $a+$b; // 结果为1.1(0+1.1)
// 强制转换
echo '<br/>',(float)$a,(float)$b; // 0,1.1
// 类型判断
echo '<hr/>';
var_dump(is_int($a)); // bool(FALSE)
var_dump(is_string($a)); // bool(TRUE)
// 获取数据类型
echo '<hr/>';
echo gettype($a); // string(虽然前面强制转换了,但并未改变本身)
// 设置类型
// var_dump 输出展示展示代码内容,结构与类型。该函数作可以窥探所有内容的类型,以及内部信息
var_dump(settype($b,'int')); // 先将字符串转换为int型,转换成功返回true,var_dump判断
是否为bool型,故显示 bool(true)
echo gettype($b),$b; // interger  1

var_dump() 是 PHP 中一个非常有用的调试函数,它能够输出一个或多个表达式的详细信息,包括其类型和值。主要用途包括:

  1. 输出变量的类型和值

    • var_dump() 可以输出变量的数据类型(例如整数、字符串、数组等)以及其具体的值。
  2. 输出数组和对象的结构

    • 对于数组和对象,var_dump() 能够逐层显示其结构,包括每个元素或属性的类型和值。
  3. 输出 NULL 的信息

    • 对于 null 值,var_dump() 显示 NULL
  4. 输出布尔值的信息

    • 对于布尔值 true 和 falsevar_dump() 显示 bool(true) 和 bool(false)

gettype() 是 PHP 中的一个函数,用于获取给定变量的数据类型,并返回其类型的字符串表示。

$var1 = 42;
$var2 = "Hello";
$var3 = array(1, 2, 3);
$var4 = null;
$var5 = true;echo gettype($var1);  // 输出:integer
echo gettype($var2);  // 输出:string
echo gettype($var3);  // 输出:array
echo gettype($var4);  // 输出:NULL
echo gettype($var5);  // 输出:boolean

主要特点和注意事项:

  • 返回值gettype() 返回一个字符串,表示变量的数据类型。
  • 适用范围:适用于所有类型的变量,包括整数、浮点数、字符串、数组、对象、NULL 和布尔值等。
  • 区分对象类型:对于对象,gettype() 返回 "object",但无法详细显示其类名。如果需要获取对象的类名,应该使用 get_class() 函数。
  • 获取资源类型:对于资源(例如数据库连接资源),gettype() 返回 "resource"。
  • 返回布尔值类型:对于布尔值,gettype() 返回 "boolean",而不是 "bool"。
$handle = fopen('example.txt', 'r');
echo gettype($handle);  // 输出:resourceclass MyClass {}
$obj = new MyClass();
echo gettype($obj);  // 输出:object// 使用 get_class 获取对象的类名
echo get_class($obj);  // 输出:MyClass

settype() 是 PHP 中的一个函数,用于将变量转换为指定的数据类型。

$var1 = "42";
$var2 = "3.14";
$var3 = "true";
$var4 = "Hello";
$var5 = "null";settype($var1, "integer");  // 将 $var1 转换为整数
settype($var2, "float");    // 将 $var2 转换为浮点数
settype($var3, "boolean");  // 将 $var3 转换为布尔值
settype($var4, "string");   // $var4 已经是字符串,这里只是示意
settype($var5, "null");     // $var5 是字符串 "null",这里只是示意echo $var1;  // 输出:42
echo $var2;  // 输出:3.14
echo $var3;  // 输出:1 (true 被转换为布尔值 true)
echo $var4;  // 输出:Hello (未改变)
echo $var5;  // 输出:null (未改变)

主要特点和注意事项:

  • 返回值settype() 函数没有返回值,它会直接修改传入的变量。
  • 适用范围:适用于标量类型的变量,包括整数、浮点数、布尔值和字符串。
  • 布尔值转换规则:字符串 "true" 被转换为布尔值 true,其他非空字符串转换为布尔值 true,空字符串转换为布尔值 false。
  • NULL 的处理settype() 不会将变量设置为 null 类型,因为在 PHP 中 null 是一个特殊的值,而不是数据类型。
  • 注意点:使用 settype() 时,要确保目标类型与变量的当前值兼容,否则可能会导致意外的结果或错误。
$number = "12345";
settype($number, "integer");
echo $number;  // 输出:12345$float_str = "3.14";
settype($float_str, "float");
echo $float_str;  // 输出:3.14$bool_str = "false";
settype($bool_str, "boolean");
echo $bool_str;  // 输出:1 ("false" 被转换为布尔值 true)$str = "Hello";
settype($str, "integer");  // $str 是字符串,不能转换为整数,结果是 0
echo $str;  // 输出:0

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

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

相关文章

机器人及其相关工科专业课程体系

机器人及其相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科&#xff0c;涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论…

C++:类和对象 III(初始化列表、explicit、友元、匿名对象)

目录 初始化列表 初始化列表的特点 类型转换、explicit 隐式类型转换 explicit关键字 static成员 静态成员变量 静态成员函数 友元 友元函数 友元类 内部类 匿名对象 编译器优化 初始化列表 初始化列表就是类成员初始化的地方 函数有它声明和定义的地方&#x…

xFormers - Transformers 加速研究的工具箱

文章目录 一、关于 xFormers特点 二、安装xFormers三、Benchmarks&#xff08;可选&#xff09;测试安装 四、使用xFormers1、Transformers 关键概念2、Repo map3、主要特点4、安装故障排除 一、关于 xFormers xFormers是一个基于PyTorch的库&#xff0c;其中包含灵活的Transf…

Java_MyBatisPlus

MyBatisPlus属于是MyBatis的拓展&#xff0c;不影响原MyBatis框架下的代码运行&#xff0c;并对MyBatis框架进行拓展及优化。 使用步骤&#xff1a; 注意&#xff1a;继承BaseMapper时要填写泛型为要操作的实体类。 基本原理&#xff1a; MyBatisPlus通过扫描实体类&#xff…

adb查看网卡信息,并修改网卡mac地址

这种方法修改mac后&#xff0c;关机后会失效! 文章结尾有永久修改mac地址的方法! 1. 查看网卡的信息&#xff0c;以及mac地址&#xff0c;ip地址&#xff0c;子网掩码等 //查看所有网卡信息adb shell ifconfig//MAC地址&#xff1a; HWaddr 5e:2c:e9:58:3e:4f //IP地址&a…

安全防御拓扑2

实验拓扑&#xff1a;​​​​​​​ 要求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2、分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3、多出口环境基于带宽比例进行…

Django定时任务框架django-apscheduler的使用

1.安装库 pip install django-apscheduler 2.添加 install_app django_apscheduler 3.在app下添加一个task.py文件&#xff0c;用来实现具体的定时任务 task.pydef my_scheduled_job():print("这个任务每3秒执行一次", time.time()) 4.在app下创建一个manag…

studio编译报错java.lang.NullPointerException

安卓studio编译报错&#xff0c;这个是一个新建的项目就报错&#xff0c;原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高&#xff0c;修改后版本 implementation androidx.appcompat:appcompat:1.4.0&#xff0c; 编译又报错 18 issues were found wh…

【Node.js】初识 Node.js

Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 &#xff0c;在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核)&#xff0c;利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…

npm install时卡在sill idealTree buildDeps卡着不动

场景&#xff1a;做导出功能的时候要用上xlsx&#xff0c;正常npm install xlsx --save 问题描述&#xff1a;npm install时卡在sill idealTree buildDeps&#xff0c;&#xff0c;卡着不动 过程&#xff1a;在网上一顿百度试过好多种方法 1、切换taobao的镜像地址 npm conf…

Android 使用FFmpeg解析RTSP流,ANativeWindow渲染 使用SurfaceView播放流程详解

文章目录 ANativeWindow 介绍ANativeWindow 的主要功能和特点ANativeWindow 的常用函数工作流程原理图通过ANativeWindow渲染RGB纯色示例 播放RTSP流工作流程图关键步骤解析自定义SurfaceView组件native 层解码渲染 效果展示注意事项 这篇文章涉及到jni层&#xff0c;以及Ffmpe…

设计分享—国外网站设计赏析

今天还是给大家分享一些国外的网站设计案例&#xff5e; 蓝蓝设计是一家专注而深入的界面设计公司&#xff0c;为期望卓越的国内外企业提供卓越的大数据可视化界面设计、B端界面设计、桌面端界面设计、APP界面设计、图标定制、用户体验设计、交互设计、UI咨询、高端网站设计、平…

来参与“向日葵杯”全国教育仿真技术大赛~

可点击进行了解&#xff1a;“向日葵杯”全国教育仿真技术大赛 (sunmooc.cn) 本次大赛共分为四个赛道&#xff1a;自主命题赛道、教育知识图谱设计赛道、FPGA硬件扑克牌对抗赛道、EasyAR元宇宙空间设计赛道。 参赛对象 &#xff1a; 具有正式学籍的在校研究生&#xff0c;本科…

Memcached介绍与使用

引言 本文是笔者对Memcached这个高性能分布式缓存组件的实践案例&#xff0c;Memcached是一种高性能的分布式内存对象缓存系统&#xff0c;用于减轻数据库负载&#xff0c;加速动态Web应用&#xff0c;提高网站访问速度。它通过在内存中缓存数据和对象来减少读取数据库的次数&…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候&#xff0c;前端页面还没有出来&#xff0c;我们就得先接口测试&#xff0c;在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…

uniapp H5 如何根据接口返回form表单,跳转银联支付界面?

uniapp如何根据form表单&#xff0c;唤醒第三方支付? 文章目录 uniapp如何根据form表单&#xff0c;唤醒第三方支付?效果图实现 效果图 接口返回 form 表单数据 实现 // 例请求成功&#xff0c;返回数据 rechargePay({}).then(res > {// 接收接口返回数据let { result …

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

JRT实体视图查询

JRT的设计目标就是多数据库支持&#xff0c;对于爬行周边数据提供DolerGet解决爬取多维数据问题。但是对于通过父表字段筛选子表数据就不能通过DolerGet取数据了&#xff0c;因为查询到的父表数据没有子表数据的ID。 比如下面表&#xff1a; 我需要按登记号查询这个登记号的报…

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…