نظرة عامة على الأساليب السحرية
تعلّموا __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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الفئات والخصائص والأساليب
- المنشئات والمدمّرات
- الخصائص والأساليب الساكنة
- نظرة عامة على الأساليب السحرية