PHP是一门广泛使用的服务器端脚本语言特别适合Web开发。

据统计互联网上超过80%的网站都在用PHP。包括Facebook维基百科WordPress等等知名的网站都是用PHP开发的。

PHP 7.2已经发布一段时间了性能和安全性都有很大提升。PHP 7.3也即将在今年年底发布目前已经有RC版本可以提前体验新特性。

很多零基础的朋友想学PHP但是不知道从哪里开始。今天我写这篇入门指南从零开始教大家学习PHP 7.2/7.3。

希望通过这篇文章大家能快速入门PHP开始自己的Web开发之旅。

一、PHP简介

先简单介绍一下PHP。

PHP全称是Hypertext Preprocessor超文本预处理器是一门开源的服务器端脚本语言。

PHP的特点:

  1. 简单易学:PHP的语法比较简单和,C语言类似有编程基础的人很容易上手。零基础的人也能快速入门。
  2. 开发效率高:PHP有丰富的内置函数和,扩展能快速开发各种Web应用。而且有很多成熟的框架,比如LaravelSymfonyThinkPHP等等能进一步提升开发效率。
  3. 跨平台:PHP能在WindowsLinuxmacOS等多种操作系统上运行。
  4. 支持多种数据库:PHP支持几乎所有的主流数据库,比如MySQLPostgreSQLOracleSQLiteMongoDB等等。
  5. 开源免费:PHP是开源的免费的不需要付费就能使用。

PHP 7是PHP的一个重大版本性能比PHP 5提升了很多据说快了2-3倍。PHP 7.2和即将发布的PHP 7.3在PHP 7的基础上进一步优化了性能增加了新特性也移除了一些过时的功能。

二、环境搭建

学PHP第一步就是搭建开发环境。

对于初学者推荐用集成环境,比如phpStudyXAMPPWAMP等等一键安装Apache/Nginx+PHP+MySQL很方便。

我自己用的是phpStudy在Windows上很好用。下面以phpStudy为例介绍环境搭建。

1. 下载phpStudy

去phpStudy官网下载最新版的phpStudy安装包。

2. 安装phpStudy

运行安装包选择安装路径注意路径不要有中文和空格,然后下一步安装完成。

3. 启动环境

打开phpStudy点击启动按钮启动Apache和MySQL。

启动成功之后,打开浏览器访问http://localhost如果能看到phpStudy的默认页面就说明环境搭建成功了。

4. 选择PHP版本

phpStudy支持多个PHP版本切换。在phpStudy的界面上可以选择PHP 7.2或者PHP 7.3的版本。

如果想体验PHP 7.3的新特性可以下载PHP 7.3的RC版本放到phpStudy的PHP目录里,然后切换。

5. 测试PHP

在phpStudy的网站根目录一般是WWW目录下创建一个文件叫phpinfo.php内容如下:

<?php
phpinfo();

然后在浏览器访问http://localhost/phpinfo.php如果能看到PHP的信息页面就说明PHP正常工作了。

在这个页面上能看到PHP的版本扩展配置等等信息。

三、基础语法

环境搭建好之后,就可以开始学PHP的基础语法了。

1. PHP标记

PHP代码需要放在<?php 和 ?>之间。比如:

<?php
echo "Hello, World!";
?>

如果文件,只有PHP代码建议省略结尾的?>避免多余的空格,或者换行导致问题。

2. 输出

PHP中用echo或者print来输出内容。

<?php
echo "Hello, World!";
print "Hello, PHP!";

echo可以输出多个字符串用逗号分隔print只能输出一个字符串。

3. 注释

PHP支持三种注释:

<?php
// 单行注释

# 单行注释(另一种写法)

/*
多行注释
可以写多行
*/

4. 变量

PHP的变量以$符号开头后面跟变量名。

<?php
$name = "张三";
$age = 25;
$height = 1.75;
$isStudent = true;

echo $name;

PHP是弱类型语言变量不需要声明类型赋值的时候,自动确定类型。

变量名区分大小写$name和$Name是两个不同的变量。

5. 常量

PHP中用define函数,或者const关键字来定义常量。

<?php
define("PI", 3.14159);
const SITE_NAME = "我的网站";

echo PI;
echo SITE_NAME;

常量一旦定义就不能修改也不能删除。常量名默认区分大小写约定俗成用大写。

6. 数据类型

PHP支持多种数据类型:

  • String(字符串):用单引号,或者双引号包裹
  • Integer(整型):整数
  • Float(浮点型):小数
  • Boolean(布尔型):true或false
  • Array(数组):一组数据
  • Object(对象):类的实例
  • NULL(空):表示变量没有值
<?php
$str = "Hello"; // 字符串
$int = 123; // 整型
$float = 3.14; // 浮点型
$bool = true; // 布尔型
$arr = array(1, 2, 3); // 数组
$null = null; // 空

可以用var_dump函数来查看变量的类型和值:

<?php
$name = "张三";
var_dump($name); // string(6) "张三"

7. 运算符

PHP支持常见的运算符:

  • 算术运算符:+-*/%++--
  • 赋值运算符:=+=-=*=/=%=.=
  • 比较运算符:=====!=!==><>=<=
  • 逻辑运算符:&&||!
  • 字符串运算符:.拼接字符串
<?php
$a = 10;
$b = 3;

echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.333...
echo $a % $b; // 1

$a++; // $a = 11
$b--; // $b = 2

$str = "Hello" . " " . "World"; // "Hello World"

注意==是松散比较会自动转换类型===是严格比较不会转换类型建议尽量用===。

8. 条件语句

PHP支持ifelseelseifswitch等条件语句。

<?php
$age = 18;

if ($age < 18) {
    echo "未成年";
} elseif ($age < 60) {
    echo "成年人";
} else {
    echo "老年人";
}

// switch
$day = "Monday";
switch ($day) {
    case "Monday":
        echo "星期一";
        break;
    case "Tuesday":
        echo "星期二";
        break;
    default:
        echo "其他";
}

9. 循环语句

PHP支持forwhiledo-whileforeach等循环语句。

<?php
// for循环
for ($i = 0; $i < 10; $i++) {
    echo $i . " ";
}

// while循环
$i = 0;
while ($i < 10) {
    echo $i . " ";
    $i++;
}

// do-while循环
$i = 0;
do {
    echo $i . " ";
    $i++;
} while ($i < 10);

// foreach循环(遍历数组)
$arr = array("苹果", "香蕉", "橙子");
foreach ($arr as $fruit) {
    echo $fruit . " ";
}

// 带键的foreach
$arr = array("name" => "张三", "age" => 25);
foreach ($arr as $key => $value) {
    echo $key . ": " . $value . " ";
}

10. 数组

数组是PHP中非常重要的数据类型。

PHP的数组分为索引数组和关联数组。

<?php
// 索引数组
$fruits = array("苹果", "香蕉", "橙子");
echo $fruits[0]; // 苹果

// 关联数组
$person = array(
    "name" => "张三",
    "age" => 25,
    "city" => "北京"
);
echo $person["name"]; // 张三

// 短数组语法(PHP 5.4+支持)
$fruits = ["苹果", "香蕉", "橙子"];
$person = ["name" => "张三", "age" => 25];

常用的数组函数:

  • count($arr):获取数组长度
  • array_push($arr, $value):向数组末尾添加元素
  • array_pop($arr):删除数组末尾的元素
  • array_shift($arr):删除数组开头的元素
  • array_unshift($arr, $value):向数组开头添加元素
  • array_merge($arr1, $arr2):合并数组
  • in_array($value, $arr):检查值是否在数组中
  • array_keys($arr):获取数组的所有键
  • array_values($arr):获取数组的所有值

四、函数

函数是一段可复用的代码块。

1. 定义函数

<?php
function functionName($param1, $param2) {
    // 函数体
    return $result;
}

2. 调用函数

<?php
function add($a, $b) {
    return $a + $b;
}

echo add(1, 2); // 3

3. 默认参数

<?php
function greet($name = "World") {
    echo "Hello, " . $name . "!";
}

greet(); // Hello, World!
greet("张三"); // Hello, 张三!

4. 可变长度参数

PHP 5.6+支持可变长度参数用...表示。

<?php
function sum(...$numbers) {
    $total = 0;
    foreach ($numbers as $n) {
        $total += $n;
    }
    return $total;
}

echo sum(1, 2, 3, 4); // 10

5. 匿名函数

PHP支持匿名函数也叫闭包。

<?php
$add = function($a, $b) {
    return $a + $b;
};

echo $add(1, 2); // 3

6. 常用内置函数

PHP有很多内置函数常用的有:

  • 字符串函数:strlenstrpossubstrstr_replacetrimexplodeimplode等等
  • 数学函数:absroundceilfloorrandmaxmin等等
  • 日期函数:datetimestrtotimemktime等等
  • 数组函数:上面已经介绍了

五、面向对象

PHP支持面向对象编程。

1. 定义类

<?php
class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function sayHello() {
        echo "Hello, 我叫" . $this->name . "今年" . $this->age . "岁。";
    }
}

2. 创建对象

<?php
$person = new Person("张三", 25);
$person->sayHello(); // Hello, 我叫张三今年25岁。

3. 继承

<?php
class Student extends Person {
    public $school;

    public function __construct($name, $age, $school) {
        parent::__construct($name, $age);
        $this->school = $school;
    }

    public function study() {
        echo $this->name . "在," . $this->school . "学习。";
    }
}

$student = new Student("李四", 20, "北京大学");
$student->sayHello();
$student->study();

4. 访问控制

PHP有三种访问控制符:

  • public:公开的任何地方都能访问
  • protected:受保护的,只有自己和子类能访问
  • private:私有的,只有自己能访问

5. 接口

<?php
interface Animal {
    public function makeSound();
}

class Dog implements Animal {
    public function makeSound() {
        echo "汪汪汪";
    }
}

6. 抽象类

<?php
abstract class Shape {
    abstract public function area();
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function area() {
        return pi() * $this->radius * $this->radius;
    }
}

六、数据库操作

PHP最常用的场景就是操作数据库特别是MySQL。

PHP操作MySQL有三种方式:MySQL(已废弃)MySQLiPDO。

推荐用PDO因为它支持多种数据库,而且更安全支持预处理语句防止SQL注入。

1. 连接数据库

<?php
$dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
$username = "root";
$password = "root";

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch (PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}

2. 查询数据

<?php
$stmt = $pdo->query("SELECT * FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($users as $user) {
    echo $user["name"] . " - " . $user["email"] . "<br>";
}

3. 预处理语句(防止SQL注入)

<?php
$id = 1;
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

echo $user["name"];

4. 插入数据

<?php
$name = "张三";
$email = "zhangsan@example.com";

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);

echo "插入成功ID: " . $pdo->lastInsertId();

5. 更新数据

<?php
$name = "李四";
$id = 1;

$stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->execute([$name, $id]);

echo "更新了" . $stmt->rowCount() . "条记录";

6. 删除数据

<?php
$id = 1;

$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([$id]);

echo "删除了" . $stmt->rowCount() . "条记录";

七、PHP 7.2/7.3新特性

最后简单介绍一下PHP 7.2和PHP 7.3的新特性。

PHP 7.2新特性

  1. 新的对象类型:可以用object作为参数类型和返回值类型。
  2. 通过名称加载扩展:PHP.ini中加载扩展不再需要写文件扩展名。
  3. 允许分组命名空间中的尾部逗号:use语句的最后可以加逗号。
  4. 密码哈希算法扩展:password_hash支持更多算法。
  5. 移除了一些过时的功能:比如create_functioneach等等。

PHP 7.3新特性(即将发布可提前体验RC版)

  1. 更灵活的Heredoc和Nowdoc语法:闭合标记可以缩进也可以不换行。
  2. 数组解构中支持引用:list和[]解构中支持引用。
  3. JSONTHROWONERROR:jsonencode和,json_decode支持抛出异常而不是返回false。
  4. is_countable函数:检查变量是否可计数避免count警告。
  5. arraykeyfirst和arraykeylast:获取数组的第一个和最后一个键。
  6. 性能进一步提升:PHP 7.3在PHP 7.2的基础上进一步优化了性能据说快了10-20%。

PHP 7.3预计在2018年12月正式发布现在已经有RC版本可以下载体验新特性。

八、学习资源推荐

最后推荐一些PHP学习资源:

1. 官方文档:PHP的官方文档写得很详细是最好的学习资料。有中文版本。

2. 《PHP和MySQL Web开发》:经典的PHP入门书籍适合初学者。

3. 《Modern PHP》:介绍现代PHP开发最佳实践适合有一定基础的人。

4. Laravel框架:最流行的PHP框架文档完善社区活跃适合进阶学习。

5. PHP The Right Way:一个网站介绍PHP最佳实践编码标准安全等等很值得看。

九、写在最后

以上就是PHP 7.2/7.3的入门指南。

PHP是一门简单易学开发效率高的语言特别适合Web开发。对于零基础的初学者来说PHP是一个很好的入门语言。

当然这篇文章只是入门介绍PHP的内容,还有很多,比如会话Cookie文件上传图像处理正则表达式错误处理异常命名空间Composer框架等等需要大家继续深入学习。

学习编程最重要的是多动手多练习。不要只看不练要边学边写代码才能真正掌握。

希望这篇入门指南能帮大家快速入门PHP。如果有什么问题,或者不懂的地方欢迎在评论区留言我们一起交流。

最后用一句话结束这篇文章:"PHP是世界上最好的语言(之一)。"

愿大家都能学好PHP成为优秀的PHP开发者。