PHP语言开发基础入门实践教程(零基础版)

PHP语言开发基础入门实践教程(零基础版)

文章目录

一、PHP 简介

1.1 核心定义

PHP(Hypertext Preprocessor,超文本预处理器)是一种服务器端脚本语言,可直接嵌入HTML中运行。区别于JavaScript(客户端执行),PHP代码在服务器端解析后,仅将生成的HTML结果返回给浏览器,安全性更高。

1.2 发展历程(关键节点)

  • 1994年:由Rasmus Lerdorf开发,最初用于个人日志管理

  • 2004年:PHP 5发布,引入面向对象编程(OOP)特性,奠定主流地位

  • 2015年:PHP 7发布,性能提升3倍以上,修复大量安全漏洞

  • 2020年:PHP 8发布,新增JIT编译器、联合类型等特性,进一步优化性能

1.3 核心优势(结合开发场景)

优势 实际应用场景
开源免费 企业无需支付授权费,降低Web项目开发成本
跨平台 可运行于Windows、Linux、macOS,适配各类服务器
数据库兼容性强 原生支持MySQL、Oracle、MongoDB等20+数据库
学习成本低 语法贴近自然语言,新手1-2周可上手简单开发

二、环境搭建

核心组件:PHP(解释器)+ Web服务器(Apache/Nginx)+ 数据库(MySQL),推荐使用集成环境简化配置。

2.1 Windows系统(推荐XAMPP)

  1. 下载:访问XAMPP官网,选择对应Windows版本(32/64位)

  2. 安装:双击运行安装包,默认勾选Apache、MySQL、PHP组件,安装路径建议选D盘(如D:\xampp)

  3. 配置:

    • 启动控制面板:运行XAMPP Control Panel,点击Apache和MySQL后的「Start」

    • 测试服务:浏览器访问http://localhost,出现XAMPP欢迎页即为成功

    • 修改端口(可选):若80端口被占用,在Apache的「Config」→「httpd.conf」中,将Listen 80改为Listen 8080,重启Apache

2.2 Linux系统(CentOS 7为例)

bash 复制代码
# 1. 安装Apache
yum install -y httpd
systemctl start httpd
systemctl enable httpd

# 2. 安装MySQL(MariaDB)
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation  # 初始化数据库,设置root密码

# 3. 安装PHP 7.4
yum install -y epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install -y php74 php74-php-mysql

# 4. 测试
systemctl restart httpd

2.3 环境验证(通用方法)

  1. 创建测试文件:在Web根目录下新建test.php(Windows:D:\xampp\htdocs;Linux:/var/www/html)

  2. 写入代码:
    <?php // PHP环境信息探针 phpinfo(); ?>

  3. 访问测试:浏览器输入http://服务器IP/test.php,显示PHP版本、环境配置等信息即为成功

三、基础语法

3.1 PHP标记(代码边界定义)

标记类型 语法 适用场景
标准标记(推荐) <?php ?> 所有环境通用,兼容性最好
短标记 <? ?> 需在php.ini中开启short_open_tag=On
脚本标记 兼容老版本HTML编辑器

3.2 注释规范(提升代码可读性)

php 复制代码
<?php
// 1. 单行注释:用于简短说明(快捷键Ctrl+/)
$name = "张三";  // 这里定义了用户名变量

/*
2. 多行注释:用于函数、类或复杂逻辑说明
功能:输出用户信息
参数:无
返回:无
*/
echo $name;

# 3. shell风格注释:与单行注释功能一致
?>

3.3 入门实战案例(含运行效果)

案例1:简单变量输出
php 复制代码
<?php
// 定义变量并赋值
$message = "欢迎来到PHP的世界!";
// 输出变量(echo是PHP内置输出语句)
echo $message;
?>

运行效果:浏览器显示「欢迎来到PHP的世界!」

案例2:变量拼接与HTML结合
php 复制代码
<?php
// 定义日期变量
$currentDate = date("Y年m月d日 H:i:s");  // date()是获取当前时间的内置函数
?>
<!DOCTYPE html>
<html>
<head><title>PHP与HTML结合</title></head>
<body>
  <h3 style="color: #2c3e50;">当前时间:<?php echo $currentDate; ?></h3>
  <p>这是PHP生成的动态内容</p>
</body>
</html>

运行效果:页面显示带样式的标题和当前时间(每秒刷新会更新)

案例3:常量定义与使用
php 复制代码
<?php
// 定义常量(常量名通常大写,值不可修改)
define("PI", 3.14159);  // 方式1:define函数
const GRAVITY = 9.8;    // 方式2:const关键字(PHP 5.3+支持)

// 计算圆的面积
$radius = 5;
$area = PI * $radius * $radius;

echo "半径为{$radius}的圆面积:" . $area;  // 双引号中可直接嵌入变量
?>

运行效果:「半径为5的圆面积:78.53975」

四、变量与数据类型

4.1 变量定义规则

  • 必须以美元符号$开头,如$age而非age

  • 首字符后可接字母、数字、下划线,不能含特殊符号(如$user_name合法,$user-name非法)

  • 区分大小写($Name$name是两个不同变量)

  • 不能使用PHP关键字(如if、for、function等)作为变量名

4.2 核心数据类型及示例

类型 说明 代码示例
整型(int) 整数(正/负/零) $age = 18; $num = -5;
浮点型(float) 带小数的数字 $price = 99.9; $weight = 5.2;
字符串(string) 文本数据,单/双引号包裹 $name = '张三'; $title = "PHP教程";
布尔型(bool) 逻辑值,仅true/false $isLogin = true; $isVip = false;
空值(null) 表示变量未赋值 $addr = null;

4.3 类型转换方法

php 复制代码
<?php
// 1. 强制类型转换((目标类型)变量)
$numStr = "123.45";
$intNum = (int)$numStr;    // 转换为整型:123(小数部分舍弃)
$floatNum = (float)$numStr;// 转换为浮点型:123.45

// 2. 自动类型转换(运算时自动触发)
$a = 10;
$b = "5";
$sum = $a + $b;  // 自动将$b转为整型,结果15

// 3. 检测变量类型
echo gettype($sum);  // 输出:integer
var_dump($numStr);   // 更详细:string(6) "123.45"
?>

五、运算符

5.1 算术运算符(数学计算)

运算符 功能 示例 结果
+ 加法 a=3; b=2; a + a+ a+b 5
- 减法 a=3; b=2; a − a- a−b 1
* 乘法 a=3; b=2; a ∗ a* a∗b 6
/ 除法(返回浮点型) a=5; b=2; a / a/ a/b 2.5
% 取余(余数符号与被除数一致) a=5; b=2; a a% ab 1

5.2 比较运算符(条件判断)

php 复制代码
<?php
$score = 85;
// 比较运算符返回布尔值(true/false)
var_dump($score > 60);    // true(大于)
var_dump($score == 85);   // true(等于,仅比较值)
var_dump($score === "85");// false(全等,比较值和类型)
var_dump($score != 90);   // true(不等于)
var_dump($score <= 100);  // true(小于等于)
?>

5.3 逻辑运算符(组合条件)

用于连接多个条件,常见于if、while等语句中

php 复制代码
<?php
$age = 20;
$hasId = true;
// 逻辑与(&&):两个条件都为true才返回true
if ($age >= 18 && $hasId) {
  echo "可办理银行卡";
}
// 逻辑或(||):只要一个条件为true就返回true
$isVip = false;
$isNew = true;
if ($isVip || $isNew) {
  echo "可享受新人优惠";
}
// 逻辑非(!):取反条件结果
if (!$isVip) {
  echo "非VIP用户";
}
?>

六、流程控制语句

6.1 条件语句(分支控制)

案例:成绩等级判断(if...elseif...else)
php 复制代码
<?php
$score = 78;
if ($score >= 90) {
  echo "等级:优秀";
} elseif ($score >= 80) {
  echo "等级:良好";
} elseif ($score >= 60) {
  echo "等级:及格";
} else {
  echo "等级:不及格";
}
?>
案例:商品分类查询(switch)
php 复制代码
<?php
$goodsType = "electronics"; // 商品类型:electronics(电子)、clothes(服装)
switch ($goodsType) {
  case "electronics":
    echo "电子类商品,支持7天无理由退换";
    break; // 跳出switch,避免执行后续case
  case "clothes":
    echo "服装类商品,未拆吊牌可退换";
    break;
  default:
    echo "普通商品,按平台规则执行";
}
?>

6.2 循环语句(重复执行)

案例1:打印1-10的数字(for循环)
php 复制代码
<?php
// for(初始化; 条件; 增量)
for ($i = 1; $i <= 10; $i++) {
  echo $i . " "; // 输出:1 2 3 ... 10
}
?>
案例2:打印九九乘法表(嵌套for循环)
php 复制代码
&lt;?php
for ($i = 1; $i <= 9; $i++) { // 控制行数
  for ($j = 1; $j <= $i; $j++) { // 控制每行的列数
    echo "{$j}×{$i}=" . ($j*$i) . "\t";
  }
  echo "<br/>"; // 换行
}
?>
案例3:累加1-100的和(while循环)
php 复制代码
<?php
$sum = 0;
$num = 1;
// while(条件):条件成立则执行循环体
while ($num <= 100) {
  $sum += $num; // 等价于$sum = $sum + $num
  $num++;
}
echo "1-100的和:" . $sum; // 结果:5050
?>

七、函数

7.1 自定义函数(模块化编程)

php 复制代码
<?php
/**
 * 自定义函数:计算两数之和
 * @param int $a 第一个数字
 * @param int $b 第二个数字
 * @return int 两数之和
 */
function add($a, $b) {
  $result = $a + $b;
  return $result; // 返回计算结果
}

// 调用函数
$total = add(10, 20);
echo "10+20=" . $total; // 输出:10+20=30

// 带默认参数的函数
function sayHello($name = "访客") {
  echo "你好," . $name;
}
sayHello(); // 输出:你好,访客
sayHello("张三"); // 输出:你好,张三
?>

7.2 常用内置函数(提升开发效率)

函数分类 函数名 功能 示例
字符串处理 strlen() 获取字符串长度 strlen("PHP") → 3
substr() 截取字符串 substr("Hello",0,3) → "Hel"
数组操作 count() 获取数组元素个数 count([1,2,3]) → 3
sort() 数组排序(升序) sort($arr) → 无返回,直接修改数组
时间处理 date() 格式化时间 date("Y-m-d") → 2025-01-19

八、数组

8.1 数组的定义与分类

php 复制代码
<?php
// 1. 索引数组(默认数字下标,从0开始)
$fruits = array("苹果", "香蕉", "橙子");
// 简化写法(PHP 5.4+)
$fruits = ["苹果", "香蕉", "橙子"];
echo $fruits[0]; // 输出:苹果

// 2. 关联数组(自定义字符串下标,适合存储键值对数据)
$user = [
  "name" => "张三",
  "age" => 20,
  "gender" => "男"
];
echo $user["name"]; // 输出:张三

// 3. 多维数组(数组嵌套数组,适合存储复杂数据)
$students = [
  ["name" => "张三", "score" => 85],
  ["name" => "李四", "score" => 92]
];
echo $students[1]["score"]; // 输出:92
?>

8.2 数组遍历方法

方法1:foreach遍历(推荐,无需关心下标)
php 复制代码
<?php
$user = ["name" => "张三", "age" => 20, "gender" => "男"];
// 遍历关联数组(获取键和值)
foreach ($user as $key => $value) {
  echo "{$key}:{$value}<br/>";
}
// 遍历索引数组(仅获取值)
$fruits = ["苹果", "香蕉", "橙子"];
foreach ($fruits as $fruit) {
  echo $fruit . " ";
}
?>
方法2:for循环遍历(适合索引数组)
php 复制代码
<?php
$fruits = ["苹果", "香蕉", "橙子"];
$length = count($fruits); // 获取数组长度
for ($i = 0; $i < $length; $i++) {
  echo "第" . ($i+1) . "个水果:" . $fruits[$i] . "<br/>";
}
?>

8.3 实用数组函数

php 复制代码
<?php
// 1. 数组排序
$nums = [3, 1, 4, 2];
sort($nums); // 升序排序
print_r($nums); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

// 2. 数组合并
$arr1 = [1, 2];
$arr2 = [3, 4];
$merged = array_merge($arr1, $arr2);
print_r($merged); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

// 3. 数组搜索
$fruits = ["苹果", "香蕉", "橙子"];
$index = array_search("香蕉", $fruits);
echo "香蕉的下标:" . $index; // 输出:1
?>

九、总结与展望

9.1 核心知识点梳理

  1. 环境基础:PHP运行依赖Web服务器+解释器,集成环境(XAMPP)是新手首选

  2. 语法核心:变量用$定义,代码需包裹在<?php ?>中,echo用于输出

  3. 数据处理:掌握6种基本数据类型,学会类型转换和数组操作

  4. 流程控制:if/switch实现分支,for/while实现循环,函数实现代码复用

9.2 实战项目入门:简易留言板(核心代码)

php 复制代码
<?php
// 存储留言的数组(实际开发中用数据库)
$messages = [];

// 处理表单提交
if ($_POST) { // 判断是否有POST提交
  $username = $_POST["username"];
  $content = $_POST["content"];
  $time = date("Y-m-d H:i");
  // 添加留言到数组
  $messages[] = [
    "username" => $username,
    "content" => $content,
    "time" => $time
  ];
}
?>
<!DOCTYPE html>
<html>
<body>
  <h2>简易留言板</h2>
  <form method="post">
    用户名:<input type="text" name="username" required><br/>
    留言内容:<textarea name="content" required></textarea><br/>
    <button type="submit">提交留言</button>
  </form>
  
  <h3>留言列表</h3>
  <?php foreach ($messages as $msg) : ?>
    <div style="border:1px solid #eee; padding:10px; margin:5px 0;">
      <p>用户:<?php echo $msg["username"]; ?> 时间:<?php echo $msg["time"]; ?></p>
      <p><?php echo $msg["content"]; ?></p>
    </div>
  <?php endforeach; ?>
</body>
</html>

9.3 进阶学习资源

  • 官方文档:PHP 官方手册(最权威的参考资料)

  • 实战课程:PHP+MySQL开发博客系统、电商网站入门项目

  • 书籍推荐:《PHP和MySQL Web开发》《现代PHP》

  • 社区交流:Stack Overflow(技术问题)、PHP中文网论坛

相关推荐
BingoGo10 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack10 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo1 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack1 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端