0Pricing
PHP Academy · درس

نظرة عامة على الأساليب السحرية

تعلّموا __toString و__get و__set وغيرها من أساليب PHP السحرية

نظرة عامة على الأساليب السحرية درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

مقدمة: الأساليب السحرية في PHP

الأساليب السحرية هي أساليب PHP خاصة تبدأ ببادئتين سفليتين، ويشغّلها محرك PHP تلقائيًا في حالات محددة. وهي تمنحكم نقاط ربط للتحكم في سلوك الكائنات.

المفاهيم الأساسية

المفاهيم الأساسية للأساليب السحرية في PHP:

  • __toString() — تحويل الكائن إلى سلسلة نصية
  • __get/__set/__isset/__unset — اعتراض الوصول إلى الخصائص
  • __call/__callStatic — اعتراض استدعاءات الدوال
  • __invoke() — كائن قابل للاستدعاء

__toString

مثال:

<?php
class Money {
    public function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public function __toString(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

$price = new Money(9.99, 'USD');
echo $price;            // 9.99 USD
echo 'Price: ' . $price; // Price: 9.99 USD

__get و__set

متابعة:

<?php
class DynamicObject {
    private array $data = [];

    public function __get(string $name): mixed {
        return $this->data[$name] ?? null;
    }

    public function __set(string $name, mixed $value): void {
        $this->data[$name] = $value;
    }
}

$obj = new DynamicObject();
$obj->name = 'Alice';
echo $obj->name;  // Alice

__isset و__unset

تدريب:

<?php
class Model {
    private array $attributes = [];

    public function __set(string $k, mixed $v): void { $this->attributes[$k] = $v; }
    public function __get(string $k): mixed { return $this->attributes[$k] ?? null; }
    public function __isset(string $k): bool { return isset($this->attributes[$k]); }
    public function __unset(string $k): void { unset($this->attributes[$k]); }
}

$m = new Model();
$m->email = 'a@b.com';
var_dump(isset($m->email));  // true
unset($m->email);
var_dump(isset($m->email));  // false

__call و__callStatic

مزيد من التعمق:

<?php
class FluentQuery {
    private array $clauses = [];

    public function __call(string $name, array $args): static {
        $this->clauses[$name] = $args[0] ?? null;
        return $this;
    }

    public function toSql(): string {
        return 'SELECT * FROM '
            . ($this->clauses['from'] ?? 'unknown');
    }
}

echo (new FluentQuery())->from('users')->toSql();
// SELECT * FROM users

__invoke

استخدام متقدم:

<?php
class Multiplier {
    public function __construct(private float $factor) {}

    public function __invoke(float $value): float {
        return $value * $this->factor;
    }
}

$double = new Multiplier(2);
echo $double(5);   // 10
echo $double(21);  // 42

$funcs = [new Multiplier(2), new Multiplier(3)];
foreach ($funcs as $fn) echo $fn(4) . ' '; // 8 12

__clone

نمط عملي واقعي:

<?php
class Config {
    private array $data = [];

    public function set(string $k, mixed $v): self {
        $this->data[$k] = $v;
        return $this;
    }

    public function __clone() {
        // deep clone nested objects if needed
    }
}

$original = (new Config())->set('theme', 'dark');
$copy = clone $original;  // triggers __clone

__debugInfo

أفضل الممارسات:

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $apiKey  // sensitive!
    ) {}

    public function __debugInfo(): array {
        return [
            'baseUrl' => $this->baseUrl,
            'apiKey'  => '***' . substr($this->apiKey, -4),  // mask key
        ];
    }
}

var_dump(new ApiClient('https://api.example.com', 'secret123'));
// Shows masked key

نمط عملي

جمع كل ذلك في نمط عملي للأساليب السحرية في PHP.

أخطاء شائعة

تجنبوا هذه الأخطاء الشائعة عند استخدام الأساليب السحرية في PHP:

  • استخدموا __toString() كي تُطبع الكائنات بصورة مفيدة
  • تتيح __get/__set أنماط proxy/decorator
  • تجعل __invoke الكائنات قابلة للاستدعاء (وهو مفيد مع array_map)
  • تمنع __debugInfo ظهور البيانات الحساسة في var_dump

تحقق سريع

ما الأسلوب السحري الذي يجعل كائن PHP قابلًا للاستدعاء مثل الدالة؟

مراجعة: الأساليب السحرية في PHP

لقد تعلّمتم الأساليب السحرية في PHP. تذكّروا النقاط الأساسية التالية:

  • استخدموا __toString() كي تُطبع الكائنات بصورة مفيدة
  • تتيح __get/__set أنماط proxy/decorator
  • تجعل __invoke الكائنات قابلة للاستدعاء (وهو مفيد مع array_map)
  • تمنع __debugInfo ظهور البيانات الحساسة في var_dump

الأسئلة الشائعة

هل درس «نظرة عامة على الأساليب السحرية» مجاني؟

نعم — نص درس «نظرة عامة على الأساليب السحرية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «نظرة عامة على الأساليب السحرية»؟

تعلّموا __toString و__get و__set وغيرها من أساليب PHP السحرية تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «نظرة عامة على الأساليب السحرية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الفئات والخصائص والأساليب
  2. المنشئات والمدمّرات
  3. الخصائص والأساليب الساكنة
  4. نظرة عامة على الأساليب السحرية
← العودة إلى PHP Academy