معايير ترميز PHP
معايير PHP
Section titled “معايير PHP”يتبع XOOPS معايير PSR-1 و PSR-4 و PSR-12 مع اتفاقيات خاصة بـ XOOPS.
نظرة عامة على المعايير
Section titled “نظرة عامة على المعايير”graph TB subgraph "معايير PSR" A[PSR-1: الترميز الأساسي] B[PSR-4: التحميل التلقائي] C[PSR-12: النمط الموسع] end
subgraph "اتفاقيات XOOPS" D[أنماط التسمية] E[تنظيم الملفات] F[التوثيق] end
A --> G[الكود النظيف] B --> G C --> G D --> G E --> G F --> Gبنية الملفات
Section titled “بنية الملفات”علامات PHP
Section titled “علامات PHP”<?php// استخدم دائماً علامات PHP الكاملة وليس العلامات القصيرة// حذف علامة الإغلاق ?> في ملفات PHP النقية
declare(strict_types=1);
namespace XoopsModules\MyModule;
// الكود هنا...رأس الملف
Section titled “رأس الملف”<?php
declare(strict_types=1);
/** * XOOPS - نظام إدارة محتوى PHP * * @package XoopsModules\MyModule * @subpackage Class * @author اسمك <email@example.com> * @copyright 2026 مشروع XOOPS * @license GPL-2.0-or-later * @link https://xoops.org */
namespace XoopsModules\MyModule;
use XoopsObject;use XoopsPersistableObjectHandler;اتفاقيات التسمية
Section titled “اتفاقيات التسمية”الفئات
Section titled “الفئات”// PascalCase لأسماء الفئاتclass ItemHandler extends XoopsPersistableObjectHandler{ // ...}
// الواجهات تنتهي بـ "Interface"interface RepositoryInterface{ public function find(int $id): ?object;}
// السمات تنتهي بـ "Trait"trait TimestampTrait{ public function getCreatedAt(): \DateTimeInterface { // ... }}
// الفئات المجردة تبدأ بـ "Abstract"abstract class AbstractEntity{ // ...}الطرق والدوال
Section titled “الطرق والدوال”// camelCase للطرقpublic function getActiveItems(): array{ // ...}
// أفعال لطرق العملpublic function createItem(array $data): Itempublic function updateItem(int $id, array $data): boolpublic function deleteItem(int $id): boolpublic function findById(int $id): ?Itempublic function hasPermission(string $permission): boolpublic function isActive(): boolpublic function canEdit(): boolالمتغيرات والخصائص
Section titled “المتغيرات والخصائص”class Item{ // camelCase للخصائص private int $itemId; private string $itemTitle; private bool $isPublished; private array $categoryIds;
// camelCase للمتغيرات public function process(): void { $itemCount = 0; $activeItems = []; $isValid = true; }}الثوابت
Section titled “الثوابت”// UPPER_SNAKE_CASE للثوابتclass Config{ public const DEFAULT_ITEMS_PER_PAGE = 10; public const MAX_UPLOAD_SIZE = 10485760; public const CACHE_LIFETIME = 3600;}
// أو استدعاءات define()define('XOOPS_ROOT_PATH', '/path/to/xoops');define('MYMODULE_VERSION', '1.0.0');بنية الفئة
Section titled “بنية الفئة”<?php
declare(strict_types=1);
namespace XoopsModules\MyModule;
use XoopsDatabase;use XoopsPersistableObjectHandler;
/** * معالج كائنات العنصر * * @package XoopsModules\MyModule */class ItemHandler extends XoopsPersistableObjectHandler{ // 1. الثوابت public const TABLE_NAME = 'mymodule_items';
// 2. الخصائص (ترتيب الرؤية: عام وحمائي وخاص) public int $defaultLimit = 10;
protected string $table;
private XoopsDatabase $db;
// 3. البناء public function __construct(?XoopsDatabase $db = null) { $this->db = $db ?? \XoopsDatabaseFactory::getDatabaseConnection(); parent::__construct($this->db, self::TABLE_NAME, Item::class, 'id', 'title'); }
// 4. الطرق العامة public function getPublishedItems(int $limit = 10): array { $criteria = new \CriteriaCompo(); $criteria->add(new \Criteria('status', 'published')); $criteria->setLimit($limit);
return $this->getObjects($criteria); }
// 5. الطرق المحمية protected function validateItem(Item $item): bool { return true; }
// 6. الطرق الخاصة private function sanitizeInput(string $input): string { return htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); }}قواعد التنسيق
Section titled “قواعد التنسيق”المحاذاة والمسافات
Section titled “المحاذاة والمسافات”// استخدم 4 مسافات للمحاذاة (وليس علامات التبويب)class Example{ public function method(): void { if ($condition) { // 4 مسافات foreach ($items as $item) { // 8 مسافات $this->process($item); } } }}
// سطر فارغ واحد بين الطرقpublic function methodOne(): void{ // ...}
public function methodTwo(): void{ // ...}طول السطر
Section titled “طول السطر”// الحد الأقصى 120 حرف لكل سطر// قسم الأسطر الطويلة بشكل منطقي
// استدعاءات الطريقة الطويلة$result = $this->someHandler->processComplexOperation( $parameter1, $parameter2, $parameter3, $parameter4);
// المصفوفات الطويلة$config = [ 'option1' => 'value1', 'option2' => 'value2', 'option3' => 'value3',];
// الشروط الطويلةif ($condition1 && $condition2 && $condition3) { // ...}إعلانات النوع
Section titled “إعلانات النوع”<?php
declare(strict_types=1);
class TypeExample{ // أنواع الخصائص (PHP 7.4+) private int $id; private string $title; private ?string $description = null; private array $tags = []; private bool $isActive = false;
// معاملات مكتوبة public function __construct( int $id, string $title, ?string $description = null ) { $this->id = $id; $this->title = $title; $this->description = $description; }
// إعلانات نوع الرجوع public function getId(): int { return $this->id; }
public function getTitle(): string { return $this->title; }
// نوع الرجوع الفارغ public function setTitle(string $title): void { $this->title = $title; }
// أنواع الاتحاد (PHP 8.0+) public function getValue(): int|string { return $this->value; }}التوثيق
Section titled “التوثيق”تعليق DocBlock للفئة
Section titled “تعليق DocBlock للفئة”/** * يتعامل مع عمليات CRUD لكيانات المقالة * * يوفر هذا المعالج طرقاً لإنشاء وقراءة وتحديث * وحذف المقالات من قاعدة البيانات. * * @package XoopsModules\Publisher * @subpackage Handler * @author فريق تطوير XOOPS * @since 1.0.0 */class ArticleHandler extends XoopsPersistableObjectHandler{تعليق DocBlock للطريقة
Section titled “تعليق DocBlock للطريقة”/** * جلب المقالات حسب الفئة * * يجلب المقالات المنشورة التابعة لفئة محددة، * مرتبة حسب تاريخ الإنشاء تنازلياً. * * @param int $categoryId معرف الفئة * @param int $limit الحد الأقصى للمقالات المراد إرجاعها * @param int $offset بداية الترقيم للصفحات * @param bool $published إرجاع المقالات المنشورة فقط * * @return Article[] مصفوفة من كائنات المقالة * * @throws \InvalidArgumentException إذا كان معرف الفئة غير صحيح * * @since 1.0.0 */public function getByCategory( int $categoryId, int $limit = 10, int $offset = 0, bool $published = true): array {تكوين PHP CS Fixer
Section titled “تكوين PHP CS Fixer”<?php
$finder = PhpCsFixer\Finder::create() ->in(__DIR__ . '/class') ->in(__DIR__ . '/src');
return (new PhpCsFixer\Config()) ->setRules([ '@PSR12' => true, 'array_syntax' => ['syntax' => 'short'], 'ordered_imports' => ['sort_algorithm' => 'alpha'], 'no_unused_imports' => true, 'declare_strict_types' => true, ]) ->setFinder($finder);التوثيق ذات الصلة
Section titled “التوثيق ذات الصلة”- معايير JavaScript
- تنظيم الأكواد
- إرشادات طلب السحب
#xoops #php #coding-standards #psr #best-practices