从0到1学PHP(二):PHP 基本语法:构建代码的基石


一、PHP 标记与注释

1.1 PHP 的起始和结束标记

在 PHP 编程中,起始标记<?php和结束标记?>是极为重要的基础概念。当 PHP 解析器处理文件时,一旦识别到<?php,就会开始解析其中的 PHP 代码,直至遇到?>结束标记,标记之外的内容会被忽略。这一特性使得 PHP 能够灵活地嵌入到各类文档中,尤其在与 HTML 融合时,能轻松实现动态网页内容的生成。例如,在一个简单的 HTML 页面中嵌入 PHP 代码输出当前日期:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>PHP 示例</title>
</head>

<body>
    <p>今天是:<?php echo date('Y-m-d');?></p>
</body>

</html>

在上述代码中,<?php echo date(‘Y - m - d’);?>这部分是 PHP 代码,它被嵌入在 HTML 的<p>标签内,date(‘Y - m - d’)函数用于获取当前日期并以指定格式输出,而 HTML 部分则负责页面的结构和展示。

此外,PHP 还有一种 echo 标记简写形式<?=,它是<?php echo的简便写法 。比如<?=‘Hello, World’;?>就等同于<?php echo ‘Hello, World’;?>。不过需要注意的是,短标记<??>虽然书写更为便捷,但它可能会因服务器配置中short_open_tag选项被禁用而无法正常工作。为确保代码的兼容性和可移植性,建议优先使用标准的<?php?>和<?=?>标记。

1.2 单行注释和多行注释

注释在编程中起着至关重要的作用,它能提高代码的可读性和可维护性,帮助开发者更好地理解代码逻辑。PHP 支持单行注释和多行注释两种方式。

单行注释可以使用//或者#来实现 。例如:

<?php
// 这是使用双斜杠的单行注释,输出当前年份
echo date('Y'); 
# 这是使用井号的单行注释,效果与双斜杠相同
echo date('Y'); 
?>

单行注释通常用于对某一行代码进行简短的解释说明,比如在复杂的计算逻辑行上方,注释该行代码的作用或计算目的;在变量声明处,注释变量的含义等。

多行注释则以/*开头,以*/结尾 。例如:

<?php
/* 
这是一段多行注释
可以包含多行内容
用于解释一段代码块的功能
这里计算两个数的和并输出
*/
$num1 = 5;
$num2 = 3;
$sum = $num1 + $num2;
echo "两数之和为:$sum"; 
?>

多行注释适用于对较大代码块进行整体说明,如一个函数、一个类或者一段复杂算法的功能描述。在调试代码时,也可以使用多行注释暂时屏蔽掉一部分代码,方便排查问题。此外,对于一些开源项目或团队协作开发的项目,合理使用注释还能帮助其他开发者快速了解代码意图,提高开发效率。

二、变量与数据类型

2.1 变量的定义、命名规则和使用方法

在 PHP 中,变量是存储数据的容器,其定义方式简洁明了,以美元符号($)开头,后面紧跟变量名。例如,$name = “John”;这行代码就定义了一个名为$name的变量,并将字符串"John"赋值给它。

变量命名规则是确保代码规范性和可读性的重要基础。首先,变量名严格区分大小写 ,$age和$Age是两个完全不同的变量,这在实际编程中需格外注意,避免因大小写混淆导致逻辑错误。其次,变量名的首字符必须是字母(A - Z,a - z)或者下划线(_) ,不能以数字开头,像$1number这样的命名是错误的,而$number1或$_number则符合规则。再者,变量名只能由字母、数字(0 - 9)和下划线组成,不允许包含空格或其他特殊字符,如$my - var是非法的,应改为$my_var。此外,要避免使用 PHP 中的保留字和系统预定义变量名 ,例如$echo、$array等都不适合作为变量名,因为它们是 PHP 的关键字或预定义变量,使用这些名称会引发语法错误。

在使用变量时,根据不同的数据类型,其表现和操作方式各有特点。对于字符串类型变量 ,可以进行拼接、截取、查找等操作。比如:

$greeting = "Hello";
$name = "World";
$message = $greeting . ", " . $name . "!";
echo $message; 

上述代码中,通过.运算符将多个字符串拼接成一个新的字符串。对于数值类型变量,可以进行加、减、乘、除等算术运算。例如:

$num1 = 5;
$num2 = 3;
$sum = $num1 + $num2;
echo $sum; 

这段代码实现了两个整数的加法运算,并输出结果。在实际应用中,变量的使用场景广泛,如在 Web 开发中,通过变量接收用户输入的数据,进行数据处理和存储;在算法实现中,利用变量保存中间结果,辅助完成复杂的计算逻辑。

2.2 数据类型详解

  1. 字符串(String):字符串是由一系列字符组成的数据类型,在 PHP 中,既可以用单引号('),也可以用双引号(")来定义 。例如:
$str1 = 'Hello, World!';
$str2 = "Hello, World!";

单引号和双引号在使用上有细微差别,双引号内的变量会被解析替换,而单引号内的变量则会原样输出。例如:

$name = "John";
echo "My name is $name"; 
echo 'My name is $name'; 

输出结果分别为My name is John和My name is $name。此外,PHP 提供了丰富的字符串操作函数,如strlen()用于获取字符串长度 ,substr()用于截取字符串 ,str_replace()用于字符串替换 等。例如:

$str = "Hello, World!";
echo strlen($str); 
echo substr($str, 0, 5); 
echo str_replace("World", "PHP", $str); 
  1. 整数(Integer):整数用于表示没有小数部分的数值 ,可以是正数、负数或零。在 PHP 中,整数的表示形式有十进制(如10)、八进制(以0开头,如010表示八进制的 8)、十六进制(以0x开头,如0x10表示十六进制的 16) 。例如:
$int1 = 10;
$int2 = 010;
$int3 = 0x10;

整数可以进行加(+)、减(-)、乘(*)、除(/)、取余(%)等算术运算 。例如:

$a = 10;
$b = 3;
echo $a + $b; 
echo $a % $b; 
  1. 浮点数(Float):浮点数也称为双精度数,用于表示带有小数部分的数值 ,如3.14、-2.718等。在进行浮点数运算时,需要注意精度问题 ,因为计算机在存储浮点数时可能存在微小的误差。例如:
$float1 = 0.1;
$float2 = 0.2;
$sum = $float1 + $float2;
if ($sum == 0.3) {
    echo "相等";
} else {
    echo "不相等,实际值为:$sum"; 
}

上述代码中,由于浮点数精度问题,$sum的值可能并不严格等于0.3,实际输出可能是不相等,实际值为:0.30000000000000004。

  1. 布尔值(Boolean):布尔值只有两个可能的值:true(真)和false(假) ,常用于条件判断语句中,如if、while等。例如:
$isLogin = true;
if ($isLogin) {
    echo "欢迎登录";
} else {
    echo "请先登录";
}

在 PHP 中,一些值会被自动转换为布尔值 ,如0、0.0、“”(空字符串)、null、[](空数组)等会被视为false,而其他值大多被视为true。

  1. 数组(Array):数组是一种可以存储多个值的数据结构 ,每个值称为一个元素,元素可以是任何数据类型,包括其他数组。数组的定义方式有多种,最常见的是使用array()函数或简化语法[]。例如:
$arr1 = array("apple", "banana", "cherry");
$arr2 = ["apple", "banana", "cherry"];

数组元素可以通过索引(从 0 开始的数字)或关联键(字符串)来访问。例如:

echo $arr1[0]; 
$person = ["name" => "John", "age" => 30];
echo $person["name"]; 

PHP 提供了众多强大的数组操作函数,如count()用于获取数组元素个数,array_push()用于向数组末尾添加元素 ,array_merge()用于合并数组 等。例如:

$arr = [1, 2, 3];
array_push($arr, 4);
echo count($arr); 
  1. 对象(Object):对象是面向对象编程的核心概念,它是类的实例。在 PHP 中,通过class关键字定义类,然后使用new关键字创建对象 。例如:
class Person {
    public $name;
    public $age;
    public function sayHello() {
        echo "Hello, my name is " . $this->name . ", and I'm " . $this->age . " years old.";
    }
}
$person = new Person();
$person->name = "John";
$person->age = 30;
$person->sayHello(); 

上述代码定义了一个Person类,包含$name和$age两个属性以及一个sayHello()方法 ,创建$person对象后,可以访问其属性和调用其方法。

2.3 数据类型的转换

在 PHP 中,数据类型的转换分为自动转换和强制转换两种方式,它们在不同的编程场景中发挥着关键作用。

  1. 自动转换:PHP 是一种弱类型语言,这一特性使得它在执行某些操作时能够根据上下文自动进行数据类型的转换。例如,当进行算术运算时,如果操作数中包含浮点数,那么其他操作数会自动转换为浮点数 ,运算结果也为浮点数。例如:
$num1 = 5;
$num2 = 3.14;
$sum = $num1 + $num2; 
var_dump($sum); 

上述代码中,整数$num1会自动转换为浮点数,然后与$num2相加,结果$sum的数据类型为浮点数,输出结果为float(8.14)。在比较运算中,==运算符会在比较前将两边的值转换为相同类型 ,再进行比较。例如:

var_dump(0 == '0'); 

这里,字符串’0’会自动转换为整数0,然后进行比较,结果为bool(true)。然而,===运算符不仅比较值,还比较数据类型 ,所以0 === '0’的结果为bool(false),因为一个是整数,一个是字符串,类型不同。

  1. 强制转换:在某些情况下,开发者需要明确地将一个变量从一种数据类型转换为另一种数据类型,这就用到了强制转换。强制转换的语法是在变量前加上用括号括起来的目标类型。例如,将一个变量转换为整型可以使用(int)或(integer) :
$str = "10";
$int = (int)$str; 
var_dump($int); 

上述代码将字符串"10"强制转换为整数10,输出结果为int(10)。将变量转换为布尔型使用(bool)或(boolean) ,转换为浮点型使用(float)、(double)或(real) ,转换为字符串使用(string) ,转换为数组使用(array) ,转换为对象使用(object) 。除了这种语法形式,PHP 还提供了一些内置函数来实现数据类型的转换,如intval()用于将变量转换为整数 ,floatval()用于转换为浮点数 ,strval()用于转换为字符串 。例如:

$float = 3.14;
$int = intval($float); 
var_dump($int); 

这里使用intval()函数将浮点数3.14转换为整数3,输出结果为int(3)。在实际开发中,数据类型转换常用于数据验证、数据存储和数据处理等环节。比如在接收用户输入时,可能需要将字符串类型的输入转换为合适的数据类型进行后续处理;在数据库操作中,也需要确保数据类型与数据库表结构定义一致。

三、运算符与表达式

3.1 各类运算符的使用

算术运算符:算术运算符用于执行基本的数学运算,是编程中进行数值计算的基础工具。常见的算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)和指数运算(**) 。例如:

$num1 = 10;
$num2 = 3;
echo $num1 + $num2; 
echo $num1 - $num2; 
echo $num1 * $num2; 
echo $num1 / $num2; 
echo $num1 % $num2; 
echo $num1 ** 2; 

上述代码依次展示了两个数的加法、减法、乘法、除法、取模和指数运算结果。其中,除法运算结果通常为浮点数,除非两个操作数都是整数且能整除 。取模运算返回除法的余数,其结果的符号与被除数相同。

  1. 赋值运算符:赋值运算符用于将一个值赋给变量 。最基本的赋值运算符是=,它将右边表达式的值赋给左边的变量。例如:$a = 5;。此外,还有复合赋值运算符,如+=、-=、*=、/=、%=、.=等 ,它们是一种便捷的写法。例如:
$a = 3;
$a += 5; 
$b = "Hello, ";
$b .= "World!"; 

在上述代码中,$a += 5等价于$a = $a + 5,$b .= "World!"等价于$b = $b . “World!” ,这种写法可以使代码更加简洁。

  1. 比较运算符:比较运算符用于比较两个值的大小或是否相等,其结果为布尔值(true或false) 。常见的比较运算符有等于(==)、全等(===)、不等于(!=或<>)、不全等(!==)、小于(<)、大于(>)、小于等于(<=)和大于等于(>=) 。例如:
$a = 5;
$b = 3;
var_dump($a == $b); 
var_dump($a === $b); 
var_dump($a != $b); 
var_dump($a > $b); 

需要注意的是,==在比较时会进行类型转换 ,而===不仅比较值,还要求数据类型相同 。例如,5 == "5"结果为true,因为会将字符串"5"转换为数字 5 后进行比较;而5 === "5"结果为false,因为一个是整数,一个是字符串,类型不同。

  1. 逻辑运算符:逻辑运算符用于连接布尔值或返回布尔值的表达式,进行逻辑判断 。常见的逻辑运算符有逻辑与(&&)、逻辑或(||)和逻辑非(!) 。例如:
$isTrue = true;
$isFalse = false;
var_dump($isTrue && $isFalse); 
var_dump($isTrue || $isFalse); 
var_dump(!$isFalse); 

在逻辑与运算中,只有当两个操作数都为true时,结果才为true;在逻辑或运算中,只要有一个操作数为true,结果就为true;逻辑非运算则是对操作数的布尔值取反 。此外,逻辑运算符还具有短路特性 ,在&&运算中,如果第一个操作数为false,则不会计算第二个操作数;在||运算中,如果第一个操作数为true,则不会计算第二个操作数 。例如:

function check() {
    echo "函数被调用";
    return true;
}
$a = false;
$a && check(); 

上述代码中,由于$a为false,所以check()函数不会被调用,也就不会输出 “函数被调用”。

3.2 表达式的组成和运算规则

表达式是 PHP 编程的重要组成部分,它由运算符和操作数组成,通过运算符对操作数进行各种运算,从而得到一个结果值。操作数可以是常量、变量、函数调用等,而运算符则决定了操作的类型和方式 。例如,$a + 5就是一个表达式,其中$a是变量,5是常量,+是加法运算符。

运算符优先级在表达式的运算过程中起着关键作用,它决定了不同运算符的执行顺序。优先级高的运算符会先被执行,只有在优先级相同的情况下,才会按照从左到右或从右到左的结合性规则进行运算 。例如,在表达式$a + $b * $c中,乘法运算符*的优先级高于加法运算符+,所以会先计算$b * $c,然后再将结果与$a相加。常见运算符的优先级从高到低大致顺序为:算术运算符(如*、/、%高于+、-)、比较运算符、逻辑运算符 。完整的运算符优先级列表可以参考 PHP 官方文档。

为了确保表达式的运算顺序符合预期,避免因运算符优先级导致的错误,我们可以使用括号来明确指定运算顺序。例如,在表达式($a + $b) * $c中,括号内的加法运算会先执行,然后再与$c进行乘法运算。当表达式较为复杂时,合理使用括号不仅能保证运算的正确性,还能提高代码的可读性 。例如:

$a = 2;
$b = 3;
$c = 4;
$d = ($a + $b) * ($c - 1); 
echo $d; 

上述代码通过括号明确了运算顺序,先分别计算$a + $b和$c - 1,然后将两个结果相乘,最终得到$d的值。在实际编程中,尤其是在处理复杂的数学计算、条件判断等场景时,深入理解表达式的组成和运算规则,合理运用运算符优先级和括号,能够编写出高效、准确的 PHP 代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑吧邓邓子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值