PHP چیست؟ آموزش کامل و جامع PHP
فهرست مطالب
PHP چیست؟
PHP (Hypertext Preprocessor) یک زبان برنامهنویسی سمت سرور است که برای توسعه وبسایتهای پویا و برنامههای تحت وب استفاده میشود. این زبان میتواند با HTML ادغام شود و به راحتی با پایگاههای داده ارتباط برقرار کند.
<?php
echo "سلام دنیا!";
$name = "کاربر";
echo "خوش آمدید " . $name;
?>
تاریخچه PHP
PHP در سال 1994 توسط راسموس لردورف ایجاد شد. در ابتدا مخفف Personal Home Page بود، اما بعداً به PHP: Hypertext Preprocessor تغییر نام داد. از آن زمان تاکنون، نسخههای مختلفی از PHP منتشر شده که آخرین نسخه پایدار آن PHP 8.3 میباشد.
ساختار پایه PHP
یک فایل PHP میتواند شامل HTML، CSS، JavaScript و کد PHP باشد. کد PHP باید درون تگهای قرار گیرد.
<!DOCTYPE html>
<html>
<head>
<title>صفحه PHP من</title>
</head>
<body>
<h1>
<?php
$greeting = "سلام دنیا!";
echo $greeting;
?>
</h1>
</body>
</html>
سینتکس PHP
سینتکس PHP ساده و انعطافپذیر است. هر دستور با سمیکالن (;) پایان مییابد و متغیرها با علامت دلار ($) شروع میشوند.
<?php
// تعریف متغیر
$message = "سلام دنیا";
// شرطها
if ($age >= 18) {
echo "شما بزرگسال هستید";
} else {
echo "شما کودک هستید";
}
// حلقهها
for ($i = 0; $i < 5; $i++) {
echo "شماره: $i <br>";
}
// آرایهها
$colors = array("قرمز", "آبی", "سبز");
foreach ($colors as $color) {
echo $color . "<br>";
}
?>
متغیرها و انواع داده در PHP
PHP از انواع داده مختلفی پشتیبانی میکند و نیازی به تعریف نوع داده هنگام تعریف متغیر نیست (loosely typed).
انواع داده اصلی:
<?php
// String
$name = "علی";
// Integer
$age = 25;
// Float
$height = 1.75;
// Boolean
$isStudent = true;
// Array
$fruits = array("سیب", "پرتقال", "موز");
// Null
$var = null;
// Object
class Person {
public $name;
public $age;
}
$person = new Person();
// نمایش نوع متغیر
var_dump($name);
var_dump($age);
?>
توابع در PHP
توابع در PHP بلوکهای کد قابل استفاده مجدد هستند که میتوانند پارامتر دریافت کرده و مقداری را برگردانند.
<?php
// تابع ساده
function sayHello($name) {
return "سلام " . $name;
}
// تابع با پارامتر پیشفرض
function calculateDiscount($price, $discount = 10) {
return $price - ($price * $discount / 100);
}
// تابع با Type Hinting (PHP 7+)
function addNumbers(int $a, int $b): int {
return $a + $b;
}
// استفاده از توابع
echo sayHello("علی"); // خروجی: سلام علی
echo calculateDiscount(1000); // خروجی: 900
echo addNumbers(5, 3); // خروجی: 8
?>
شیگرایی در PHP
PHP از برنامهنویسی شیگرا (OOP) پشتیبانی کامل میکند و شامل ویژگیهایی مانند کلاسها، وراثت، چندریختی و غیره است.
<?php
class Car {
// ویژگیها
private $brand;
private $model;
// سازنده
public function __construct($brand, $model) {
$this->brand = $brand;
$this->model = $model;
}
// متد
public function getInfo() {
return "خودرو: {$this->brand} مدل {$this->model}";
}
}
// کلاس فرزند
class ElectricCar extends Car {
private $batteryLife;
public function __construct($brand, $model, $batteryLife) {
parent::__construct($brand, $model);
$this->batteryLife = $batteryLife;
}
}
// استفاده از کلاسها
$car = new Car("بنز", "2023");
echo $car->getInfo();
?>
کار با پایگاه داده در PHP
PHP قابلیتهای قدرتمندی برای کار با پایگاههای داده مختلف، بهویژه MySQL، دارد.
<?php
// اتصال با PDO
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=mydb;charset=utf8mb4",
"username",
"password"
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// اجرای کوئری
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
echo "خطا در اتصال: " . $e->getMessage();
}
?>
امنیت در PHP
امنیت در برنامهنویسی PHP بسیار مهم است. برخی از نکات امنیتی مهم عبارتند از:
<?php
// پاکسازی ورودیهای کاربر
$userInput = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
// رمزنگاری رمز عبور
$password = password_hash($userInput, PASSWORD_DEFAULT);
// بررسی رمز عبور
if (password_verify($userInput, $hashedPassword)) {
echo "رمز عبور صحیح است";
}
// جلوگیری از XSS
$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
?>
فریمورکهای PHP
فریمورکهای PHP ابزارهایی قدرتمند برای توسعه سریعتر و مطمئنتر برنامههای وب هستند:
فریمورکهای محبوب:
- Laravel - محبوبترین فریمورک PHP
- Symfony - فریمورک قدرتمند برای پروژههای enterprise
- CodeIgniter - فریمورک سبک و سریع
- Yii - فریمورک با کارایی بالا
بهترین شیوههای کدنویسی PHP
رعایت اصول و استانداردهای کدنویسی در PHP بسیار مهم است:
اصول مهم:
- استفاده از PSR (PHP Standards Recommendations)
- نامگذاری معنادار متغیرها و توابع
- مستندسازی کد با PHPDoc
- استفاده از Dependency Injection
- نوشتن تستهای واحد
<?php
/**
* کلاس مدیریت کاربران
*/
class UserManager
{
private $db;
/**
* سازنده کلاس
* @param PDO $database اتصال پایگاه داده
*/
public function __construct(PDO $database)
{
$this->db = $database;
}
/**
* افزودن کاربر جدید
* @param string $username نام کاربری
* @param string $email ایمیل
* @return bool
*/
public function addUser(string $username, string $email): bool
{
// کد افزودن کاربر
}
}
?>
سرورهای توسعه محلی
- XAMPP - محیط توسعه محلی شامل Apache, MySQL, PHP
- WAMP - نسخه ویندوزی سرور محلی
- MAMP - نسخه مک سرور محلی
- Docker - کانتینرسازی برای محیط توسعه
# نصب یک پکیج جدید
composer require monolog/monolog
# نصب تمام وابستگیها
composer install
# بهروزرسانی وابستگیها
composer update
موضوعات پیشرفته PHP
Namespaces و Autoloading
<?php
namespace App\Controllers;
use App\Models\User;
use App\Services\AuthService;
class UserController
{
private $authService;
public function __construct(AuthService $authService)
{
$this->authService = $authService;
}
public function login(string $username, string $password): bool
{
return $this->authService->authenticate($username, $password);
}
}
?>
Traits و Interfaces
<?php
interface LoggerInterface {
public function log(string $message);
}
trait Timestampable {
private $createdAt;
public function setCreatedAt() {
$this->createdAt = new DateTime();
}
}
class FileLogger implements LoggerInterface {
use Timestampable;
public function log(string $message) {
$this->setCreatedAt();
file_put_contents('app.log', "[{$this->createdAt->format('Y-m-d H:i:s')}] $message\n", FILE_APPEND);
}
}
?>
Exception Handling
<?php
class CustomException extends Exception {
public function errorMessage() {
return "خطای سفارشی: " . $this->getMessage();
}
}
try {
$file = fopen("test.txt", "r");
if (!$file) {
throw new CustomException("خطا در باز کردن فایل");
}
} catch (CustomException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo "خطای عمومی: " . $e->getMessage();
} finally {
echo "این بخش همیشه اجرا میشود";
}
?>
بهینهسازی عملکرد PHP
بهینهسازی عملکرد در PHP برای ساخت برنامههای سریع و کارآمد ضروری است:
نکات کلیدی بهینهسازی:
- استفاده از OPcache برای کش کردن کدهای کامپایل شده
- بهینهسازی کوئریهای پایگاه داده
- استفاده از سیستمهای کش مانند Redis یا Memcached
- بهینهسازی تصاویر و فایلهای رسانهای
<?php
// اتصال به Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// ذخیره داده در کش
$redis->set('user:1', json_encode($userData), 3600); // کش برای یک ساعت
// بازیابی از کش
if ($redis->exists('user:1')) {
$userData = json_decode($redis->get('user:1'), true);
} else {
$userData = $database->getUserData(1);
$redis->set('user:1', json_encode($userData), 3600);
}
?>
استقرار برنامههای PHP
استقرار صحیح برنامههای PHP نیازمند رعایت نکات مهمی است:
مراحل استقرار:
- تنظیم سرور وب (Apache/Nginx)
- پیکربندی PHP و تنظیمات php.ini
- تنظیم SSL و امنیت
- پیکربندی پایگاه داده
- تنظیم Cron Jobs