📜  PHP 面试常见问题(1)

📅  最后修改于: 2023-12-03 15:18:32.578000             🧑  作者: Mango

PHP 面试常见问题

PHP 是一个广泛应用于 Web 开发领域的编程语言,因此,很多公司在招聘 PHP 开发工程师时,会出现一些类似的问题。下面是一些 PHP 面试常见问题以及参考答案。

1. 什么是 PHP?

PHP 是一种开源的、服务器端的、跨平台编程语言,它可以嵌入到 HTML 页面中使用。

示例代码
<?php
    echo "Hello World!";
?>
2. $_GET 和 $_POST 之间有什么区别?

这两个是 PHP 中常用的超全局变量。他们的主要区别在于提交表单的方式不同。$_GET 是通过 URL 参数提交的,而 $_POST 是通过 POST 方法提交的。

示例代码
<?php
    $name = $_GET['name']; // 获取 URL 参数
    $password = $_POST['password']; // 获取 POST 提交的表单数据
?>
3. PHP 中的魔术方法有哪些?

在 PHP 中,以下方法被称为魔术方法:

  • __construct():在初始化一个对象时调用
  • __destruct():在对象被销毁之前调用
  • __set():在给未定义的属性赋值时自动调用
  • __get():在获取未定义的属性值时自动调用
  • __call():在调用未定义的方法时自动调用
  • __toString():在将对象转换为字符串时自动调用
示例代码
<?php
    class Student {
        private $name;
        private $age;
        public function __construct($name, $age) {
            $this->name = $name;
            $this->age = $age;
        }
        public function __get($property) {
            if (property_exists($this, $property)) {
                return $this->$property;
            }
            else
                throw new Exception("Property not found.");
        }
        public function __set($property, $value) {
            if (property_exists($this, $property)) {
                $this->$property = $value;
            }
            else
                throw new Exception("Property not found.");
        }
        public function __toString() {
            return "Name: ".$this->name." Age: ".$this->age;
        }
    }
    $student = new Student("Tom", 20);
    echo $student;  // 输出 Name: Tom Age: 20
?>
4. 如何在 PHP 中连接数据库?

在 PHP 中,可以使用 PDO 或 mysqli 扩展连接 MySQL 数据库。

示例代码
<?php
    $host = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "dbname";
    // 使用 PDO 连接数据库
    try {
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        // 设置 PDO 错误模式为异常
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";
    }
    catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }
    // 使用 mysqli 连接数据库
    $conn = mysqli_connect($host, $username, $password, $dbname);
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "Connected successfully";
?>
5. 如何在 PHP 中处理文件上传?

在 PHP 中,可以通过 $_FILES 超全局变量来处理上传的文件。具体实现可以使用 move_uploaded_file() 函数将上传的文件移动到指定的目录中。

示例代码
<?php
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    // 检查文件是否已存在
    if (file_exists($target_file)) {
        echo "File already exists.";
        $uploadOk = 0;
    }
    // 检查文件大小
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "File is too large.";
        $uploadOk = 0;
    }
    // 允许上传的文件类型
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "Only JPG, JPEG, PNG & GIF files are allowed.";
        $uploadOk = 0;
    }
    // 判断上传是否成功
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    }
?>