📅  最后修改于: 2023-12-03 15:33:41.301000             🧑  作者: Mango
如果你是一名PHP开发者,面试是你职业发展过程中的必经之路。以下是一些常见的PHP面试问题和答案,帮助你在面试中展现出自己的技能和知识。
PHP是一种开源的服务器端脚本语言,主要用于Web开发,可以嵌入到HTML中使用。PHP具有以下优点:
PHP的缺点有:
PHP自动加载是一种将类自动载入内存的机制,避免了手动导入类文件的烦琐过程。PHP 5.x及以上版本,提供了一个魔术函数(__autoload()),用于自动加载类文件。
// 自定义Autoloader类
class Autoloader
{
public static function autoload($class)
{
// 类名以“\”开头表示全局命名空间,需要去掉
$class = ltrim($class, '\\');
// 文件路径
$file = '';
$namespace = '';
if ($lastNsPos = strrpos($class, '\\')) {
$namespace = substr($class, 0, $lastNsPos);
$class = substr($class, $lastNsPos + 1);
$file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$file .= str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
// include加载类文件
include $file;
}
}
// 注册Autoloader类的autoload()方法
spl_autoload_register('Autoloader::autoload');
PHP的魔术方法(Magic methods)是在类中使用的特殊方法,以两个下划线(__)开头和结尾。它们的作用如下:
MVC是一种架构模式,是将应用程序分成三个基本部分:Model(模型)、View(视图)和Controller(控制器)。
在PHP项目中使用MVC的一般流程为:
SQL注入(SQL Injection)是指恶意攻击者通过合理利用Web应用程序,将恶意的SQL语句插入到应用程序的输入参数中,使应用程序接受并执行恶意SQL语句,从而恶意盗取、删除或修改数据。
PHP中防止SQL注入的方法如下:
// PDO预处理语句演示
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
// MySQLi预处理语句演示
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
// addslashes()或mysql_real_escape_string()演示
$username = addslashes($_POST['username']);
$password = md5(addslashes($_POST['password']));
$query = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";