I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تأمن الـ Data Models في PHP 8.4 باستخدام ميزة Asymmetric Visibility

إزاي تأمن الـ Data Models في PHP 8.4 باستخدام ميزة Asymmetric Visibility أكيد مريت بالموقف ده كتير وأنت بتكتب كود PHP: بتبني كلاس (Class) وعايز تخلي خصائص الكائ

إزاي تأمن الـ Data Models في PHP 8.4 باستخدام ميزة Asymmetric Visibility
Reading Count: 44

إزاي تأمن الـ Data Models في PHP 8.4 باستخدام ميزة Asymmetric Visibility

أكيد مريت بالموقف ده كتير وأنت بتكتب كود PHP: بتبني كلاس (Class) وعايز تخلي خصائص الكائن (Properties) متاحة للقراءة لأي حد من بره الكلاس، بس في نفس الوقت خايف حد يغير قيمتها من بره ويضربلك الـ Data Integrity أو سلامة البيانات. زمان كنا بنعمل إيه؟ كنا بنخلي الـ Property private ونعمل دالة getter عشان نقرأها، ودالة setter عشان نعدلها، ده غير "الروتين" الممل في كتابة دوال الـ Boilerplate الكتير.

مع تحديث PHP 8.4 الجديد، المطورين جابولنا ميزة بتوفر علينا وقت ومجهود كبير جداً وهي الرؤية غير المتماثلة (Asymmetric Visibility). الميزة دي بتسمحلك تحدد صلاحيات مختلفة للقراءة والكتابة لنفس الخاصية، حاجة كدة زي "شباك تذاكر" تقدر تشوف اللي جواه لكن م تقدرش تغير التذاكر بنفسك.

يعني إيه Asymmetric Visibility؟

ببساطة، الميزة دي بتسمحلك تعمل public read لخاصية معينة، لكن في نفس الوقت تكون الـ write access ليها محمية (private أو protected). يعني من بره الكلاس تقدر تنادي على المتغير وتشوف قيمته، لكن لو حاولت تعدل قيمته من بره، الـ PHP هتديك "على قفاك" (Fatal Error) وتمنعك فوراً. ده بيخلي الـ Data Models بتاعتك أنضف بكتير وأكتر أماناً من غير ما تحتاج تكتب دوال Getter أو Setter.

إزاي تستخدمها في الكود بتاعك؟

شوف المثال ده عشان تفهم الفرق بين الطريقة القديمة والطريقة الجديدة:


// الطريقة الجديدة في PHP 8.4
class User {
    public private(set) string $username;

    public function __construct(string $username) {
        $this->username = $username;
    }
}

$user = new User('ahmed_dev');
echo $user->username; // شغال وزي الفل (Public Read)
$user->username = 'hacker'; // هيطلع Fatal Error فوراً (Private Write)

لاحظ هنا إني كتبت public private(set)، وده معناه للمترجم (Compiler) إن أي حد يقدر يقرأ $username، لكن التعديل عليها محصور فقط داخل الكلاس نفسه.

ليه الميزة دي مهمة جداً لمشاريعك؟

  • أمان البيانات (Data Security): بتمنع التعديلات العشوائية على بيانات الـ Model اللي ممكن تبوظ منطق البرنامج (Business Logic).
  • تقليل الكود (Boilerplate Reduction): هتنسى حاجة اسمها Getter و Setter إلا لو كنت هتعمل عمليات حسابية معقدة وقت القراءة أو التعديل.
  • قراءة أسهل (Code Readability): الكود بيبقى واضح ومباشر، وأي حد يقرأ الكلاس بتاعك هيفهم على طول إن الخاصية دي للقراءة فقط من بره.

تطبيقات عملية في الـ Data Models

لو عندك كلاس بيمثل Entity في قاعدة البيانات، غالباً مش عايز الـ ID يتغير بعد ما الكائن يتنشئ، بس أكيد محتاج تعرض الـ ID في الـ JSON response. الـ Asymmetric Visibility هنا هي البطل الخارق، لأنها بتحمي الـ ID من التلاعب مع الحفاظ على سهولة الوصول ليه.

نصيحة من أخ لمبرمج

يا صاحبي، اللغة بتطور بسرعة، ومتابعتك لـ PHP 8.4 مش بس عشان الميزات دي، لكن عشان تكتب كود "Modern" و"Clean". نصيحتي ليك، ما تستسهلش وتخلي كل حاجة public. الميزة دي أداة قوية جداً في إيدك عشان تبني بنية تحتية (Architecture) قوية ومستقرة. جربها في مشروعك الجاي، وشوف الفرق بنفسك في نظافة الكود.

لو حابب تتعمق أكتر، دايماً تابع الـ RFCs الرسمية الخاصة بـ PHP، دي هي "المطبخ" اللي بيطلع منه كل جديد. بالتوفيق في رحلتك البرمجية!


Share

Related posts

Jul 26, 2026 • 1 min read
Reading Count: 1
عنوان تلقائي

أهلاً بيك يا صديقي المبرمج في مقال جديد من سلسلة الشروحات التقنية بعيون مصرية خالصة. خليني أبدأ معاك...

Jul 25, 2026 • 1 min read
Reading Count: 4
ازاي توفر وقتك وتعمل أتمتة للمهام اليومية باستخدام PHP CLI

ازاي توفر وقتك وتعمل أتمتة للمهام اليومية باستخدام PHP CLI أهلاً بيك يا صديقي المبرمج في عالم الإنتا...

Jul 25, 2026 • 1 min read
Reading Count: 11
التشفير المتقدم في PHP: إزاي تحمي بيانات مستخدميك باستخدام Sodium وتنسى الطرق القديمة؟

التصنيف: تطوير الـ ويب (Web Development) وشروحات برمجية (Tutorials) التشفير المتقدم في PHP: إزاي تحم...