فایل PHP و خروجی ساده
در فایل دارای HTML، قطعهٔ PHP را با تگ استاندارد باز کنید و برای متن خروجی از نمونهٔ زیر استفاده کنید.
<?php$name = "Ava";echo "Hello, " . $name;
چیتشیت PHP برای نحو پایه، متغیرها، رشته و آرایه، تابع، کلاس، فایل و کار امن با داده. نمونههای PDF با اجرای فایل PHP، مقدارهای پایه و متغیرها شروع میشوند. در برنامهٔ واقعی از نسخهٔ پشتیبانیشدهٔ PHP استفاده کنید، نوع ورودی بیرونی را بررسی کنید و خطاهای توسعه را در محیط production به کاربر نشان ندهید. رشتهها را با اتصال یا interpolation داخل رشتهٔ دابلکوتیشن بسازید. پیش از نمایش داده در HTML آن را بر اساس context escape کنید؛ خروجی خامِ کاربر را HTML فرض نکنید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
در فایل دارای HTML، قطعهٔ PHP را با تگ استاندارد باز کنید و برای متن خروجی از نمونهٔ زیر استفاده کنید.
<?php$name = "Ava";echo "Hello, " . $name;نام متغیر با نمونهٔ زیر آغاز میشود؛ از نامگذاری روشن و مقداردهی نوعسازگار استفاده کنید.
<?php$enabled = true;$count = 12;$price = 19.95;$label = "PHP";$nothing = null;مقدار ورودی را هنگام نیاز با is_int، is_string یا validation دامنه بررسی کنید؛ cast بهتنهایی اعتبارسنجی نیست.
<?php$quantity = 3;var_dump($quantity);var_dump(is_int($quantity));برای توضیح تصمیم غیرآشکار از کامنت استفاده کنید و فرمان اجرای فایل را در ترمینال پروژه بزنید.
<?php// یک خط توضیح/* توضیح چندخطی*/echo "Ready";عملگر نقطه رشتهها را متصل میکند و متغیر داخل double-quoted string قابلدرونگذاری است.
<?php$firstName = "Ava";$lastName = "Rostami";$fullName = $firstName . " " . $lastName;$message = "Hello, $firstName";برای مقایسهٔ مقدار و نوع، === و !== را ترجیح دهید و شرطها را با پرانتزهای روشن ترکیب کنید.
<?php$isAllowed = $role === "editor" && $isActive === true;برای متن HTML از نمونهٔ زیر با UTF-8 و پرچمهای مناسب استفاده کنید؛ escaping باید با context خروجی هماهنگ باشد.
<?phpecho htmlspecialchars( $userInput, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");آرایههای indexed با اندیس عددی مرتب نگهداری میشوند؛ مقدار را با اندیس یا حلقه بخوانید.
<?php$scores = [18, 16, 20];$scores[] = 17;foreach ($scores as $score) { echo $score . PHP_EOL;}کلیدهای معنادار خواندن و انتقال داده را ساده میکنند؛ برای JSON از شکل متناسب خروجی استفاده کنید.
<?php$user = [ "name" => "Ava", "active" => true,];echo $user["name"];array_filter و array_map عملیات مجموعهای را روشن میکنند؛ callbackها را کوچک و قابلآزمون نگه دارید.
<?php$numbers = [1, 2, 3, 4];$even = array_filter( $numbers, fn (int $number): bool => $number % 2 === 0);شرطهای مرتبط را با else-if مرتب کنید و شاخهٔ نهایی را برای حالت پیشفرض مشخص نگه دارید.
<?phpif ($score >= 18) { $result = "excellent";} elseif ($score >= 10) { $result = "passed";} else { $result = "retry";}نوعهای صریح و return type خطای استفاده را زودتر آشکار میکنند؛ تابع را برای یک مسئولیت طراحی کنید.
<?phpfunction add(int $first, int $second): int{ return $first + $second;}مقدار پیشفرض برای گزینهٔ واقعاً اختیاری است؛ در فراخوانی طولانی از named arguments برای خوانایی استفاده کنید.
<?phpfunction greet(string $name, string $prefix = "Hello"): string{ return "$prefix, $name";}greet(name: "Ava");نمونهٔ زیر برای فایل ضروری خطا را متوقف میکند؛ مسیر را از مقدار ثابت یا مسیرهای کنترلشدهٔ برنامه بسازید.
<?phprequire_once __DIR__ . "/bootstrap.php";فایل را فقط از محل مجاز بخوانید و نتیجهٔ نمونهٔ زیر را بررسی کنید؛ داده را ورودی قابلاعتماد تلقی نکنید.
<?php$path = __DIR__ . "/data/config.json";$contents = file_get_contents($path);if ($contents === false) { throw new RuntimeException("Could not read configuration.");}وابستگیها را با Composer مدیریت و فایل lock را همراه تغییرات پروژه نگه دارید.
composer installcomposer require vendor/packagecomposer dump-autoloadpropertyهای فقطخواندنی و نوعدار قرارداد مدل را روشن میکنند؛ جزئیات داخلی را بیدلیل public نکنید.
<?phpfinal class User{ public function __construct( public readonly int $id, public string $name, ) {}}exception را در مرز مناسب بگیرید، زمینهٔ خطا را ثبت کنید و اطلاعات حساس را در پاسخ عمومی قرار ندهید.
<?phptry { $result = performOperation();} catch (RuntimeException $error) { error_log($error->getMessage()); throw $error;}مقدارهای query را bind کنید؛ نام جدول یا ستون را از ورودی آزاد نگیرید و برای شناسههای مجاز whitelist بهکار ببرید.
<?php$statement = $pdo->prepare( "SELECT id, email FROM users WHERE id = :id");$statement->execute(["id" => $userId]);$user = $statement->fetch();کد PHP را با <?php آغاز کنید و سبک فایل را با استاندارد پروژه هماهنگ نگه دارید.
متغیر با $ آغاز میشود؛ مقایسه دقیق را با === انجام دهید.
آرایه انجمنی را برای کلید-مقدار و آرایه فهرستی را برای عناصر مرتب بهکار ببرید.
نوع پارامتر و خروجی تابع را مشخص کنید.
کلاس و namespace را مطابق PSR-4 سازمان دهید.
برای وابستگیها از Composer و فایل lock استفاده کنید.
کوئری پایگاه داده را با prepared statement و پارامتر اجرا کنید.
خروجی HTML را با توجه به context escape کنید؛ ورودی کاربر را معتبر بدانید.
خطاها را ثبت کنید اما جزئیات حساس را به کاربر نمایش ندهید.
نسخه PHP را مشخص و تستهای واحد و تحلیل ایستا را در فرایند تحویل اجرا کنید.
برای رمز عبور از password_hash() و password_verify() استفاده کنید؛ رمز خام یا hash دستساز نگه ندارید.
خروجی را با توجه به context HTML escape کنید و برای query از PDO prepared statement استفاده کنید.