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://www.rhkb.cn/news/380458.html

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

相关文章

Golang|Shopee一面

1、一个有环的链表&#xff0c;如何确认链表有环&#xff0c;环的长度。 LeetCode 142。原题为判断链表是否有环&#xff0c;如果有环找到环的起点。本题修改为求环的长度&#xff0c;基本思路一致&#xff0c;依然为双指针。当快慢指针相遇之后&#xff0c;如果寻找环的起点&…

防火墙内容安全综合实验

一、实验拓扑 二、实验要求 1&#xff0c;假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件&#xff0c;内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2&#xff0c;我们需要针对办公区用户进行上网行为管理&#xff0c;要…

【LeetCode】翻转二叉树

目录 一、题目二、解法完整代码 一、题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root…

数据可视化配色新工具,颜色盘多达2500+类

好看的配色,不仅能让图表突出主要信息,更能吸引读者,之前分享过很多配色工具,例如, 👉可视化配色工具:颜色盘多达3000+类,数万种颜色! 本次再分享一个配色工具pypalettes,颜色盘多达2500+类。 安装pypalettes pip install pypalettes pypalettes使用 第1步,挑选…

1.17、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法&#xff0c;其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络&#xff08;Competitive Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;其核心部分是…

【JavaScript 算法】拓扑排序:有向无环图的应用

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现方法一&#xff1a;Kahn算法方法二&#xff1a;深度优先搜索&#xff08;DFS&#xff09;注释说明&#xff1a; 三、应用场景四、总结 拓扑排序&#xff08;Topological Sorting&#xff09;是一种…

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…

2024年第二季度 DDoS 威胁趋势报告

2024 年上半年&#xff0c;Cloudflare 缓解了 850 万次 DDoS 攻击&#xff1a;第一季度 450 万次&#xff0c;第二季度 400 万次。总体而言&#xff0c;第二季度 DDoS 攻击数量环比下降了 11%&#xff0c;但同比增长了 20%。 DDoS 攻击分布&#xff08;按类型和手段&#xff09…

面试官听了我说的单例设计模式,让我出门右转

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

Go语言之参数传递

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 修改参数 假设你定义了一个函数&#xff0c;并在函数里对参数进行…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

C语言 | Leetcode C语言题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){int i 0;int j matrixColSize[0] - 1;while(j > 0 && i < matrixSize){if(target < matrix[i][j])j--;else if(target > matrix[…

达梦数据库的系统视图v$mal_link_status

达梦数据库的系统视图v$mal_link_status 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$MAL_LINK_STATUS 是一个动态性能视图&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于显示MAL&#xff08;Multi-threaded Architecture Link&…

cs224w笔记(p5)

链接预测任务的两种类型&#xff1a;随机缺失边&#xff1b;随时间演化边。 第一种假设可以以蛋白质之间的交互作用举例&#xff0c;缺失的是研究者还没有发现的交互作用。 第二种假设可以以社交网络举例&#xff0c;随着时间流转&#xff0c;人们认识更多朋友。 基于相似性进…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十六章 Linux驱动初探

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Android 小白菜鸟从入门到精通教程

前言 Android一词最早出现于法国作家利尔亚当&#xff08;Auguste Villiers de l’Isle-Adam&#xff09;在1886年发表的科幻小说《未来的夏娃》&#xff08;L’ve future&#xff09;中。他将外表像人的机器起名为Android。从初学者的角度出发&#xff0c;通过通俗易懂的语言…

使用 useLazyAsyncData 提升数据加载体验

title: 使用 useLazyAsyncData 提升数据加载体验 date: 2024/7/19 updated: 2024/7/19 author: cmdragon excerpt: 摘要&#xff1a;本文介绍useLazyAsyncData函数在Nuxt 3中的使用&#xff0c;以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态&…

[网鼎杯 2018]Fakebook

解法一 在robots.txt&#xff0c;可以发现/user.php.bak 下载下来是一段代码 <?phpclass UserInfo {public $name "";public $age 0;public $blog "";public function __construct($name, $age, $blog){$this->name $name;$this->age (…

spring-boot 整合 redisson 实现延时队列(文末有彩蛋)

应用场景 通常在一些需要经历一段时间或者到达某个指定时间节点才会执行的功能&#xff0c;比如以下这些场景&#xff1a; 订单超时提醒收货自动确认会议提醒代办事项提醒 为什么使用延时队列 对于数据量小且实时性要求不高的需求来说&#xff0c;最简单的方法就是定时扫描数据…

电机泵盖机器人打磨去毛刺,选德国进口高精度主轴

机器人打磨去毛刺该如何选择主轴呢&#xff1f;首先我们需要考虑的是工件的材质&#xff0c;电机泵盖通常使用铸铁、不锈钢、合金钢等金属材质&#xff0c;因此这类保持的硬度较高&#xff0c;一般会选择功率、扭矩较大的德国进口高精度主轴Kasite 4060 ER-S。 Kasite 4060 ER-…