شرح صفوف ومحتوى الفقرة
يستدعي PHP الدالة __get($name) عند محاولة قراءة خاصية غير موجودة أو غير متاحة، ويستدعي __call($name, $args) عند استدعاء دالة غير معرفة في الكائن.
- ترتبط بـ
__getدوال مكملة مثل__set($name, $value)عند الكتابة و__isset($name)عند الفحص بـisset(). - في PHP 8.2+، أصبحت إضافة خصائص ديناميكية غير معلنة للكائنات العادية مهملة (Deprecated)؛ لذا استخدم مصفوفة داخلية خاصة مع
__get()عند الحاجة. - فضّل دائماً الخصائص والدوال الصريحة ذات الأنواع المحددة عندما تكون الهيكلة معروفة مسبقاً لدعم الإكمال التلقائي في المحررات.
قراءة $cfg->env تستدعي __get("env")، واستدعاء $cfg->refresh("cache") يمرر الاسم والمعاملات إلى __call().
PHP
<?php
class ConfigBag {
public function __construct(private array $items) {}
public function __get(string $key): mixed {
return $this->items[$key] ?? "default";
}
public function __call(string $method, array $args): string {
return "Handled {$method}(" . implode(",", $args) . ")";
}
}
$cfg = new ConfigBag(["env" => "production"]);
echo $cfg->env . " | " . $cfg->refresh("cache") . "\n";