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、允许中文变量;(不建议)

php 复制代码
// 定义时不需要关键字,但必须使用$符号
$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

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

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

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

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

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

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

可变变量

如果一个变量保存的值刚好是另外一个变量的名字,则可直接通过访问一个变量得到另外一个变量的

值:但需在变量前多加一个$符号

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

变量传值

将一个变量赋值给另一个变量:值传递引用传递

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

php 复制代码
// 值传递
<?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 函数中的参数是通过值传递的,这意味着函数内部对参数的修改不会影响到函数外部的变量。但是,通过引用传值,函数可以直接修改调用者传递的变量本身,而不是变量的副本。

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 复制代码
<?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函数的第三个参数);

系统常量

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

php 复制代码
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)

    • 表示逻辑值,可以是 truefalse.
  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、以数字开头的字符串,取到碰到字符串为止。(不会同时包含两个小数点)

php 复制代码
$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. 输出布尔值的信息

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

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

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"。
  • 返回布尔值类型 :对于布尔值,g``ettype() 返回 "boolean",而不是 "bool"。
php 复制代码
$handle = fopen('example.txt', 'r');
echo gettype($handle);  // 输出:resource

class MyClass {}
$obj = new MyClass();
echo gettype($obj);  // 输出:object

// 使用 get_class 获取对象的类名
echo get_class($obj);  // 输出:MyClass

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

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() 时,要确保目标类型与变量的当前值兼容,否则可能会导致意外的结果或错误。
php 复制代码
$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
相关推荐
JaguarJack2 小时前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo2 小时前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack17 小时前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay2 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954482 天前
CTF 伪协议
php
BingoGo4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack6 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端