• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کلاسی شبیه Registry؟
#1
نظرتون راجب این کلاس چیه؟
راه حلی برای multi extends هستش - از سایت php.net

بنظرم شبیه Registry یه

هسته:
کد پی‌اچ‌پی:
<?php

abstract class ExtensionBridge
{
    private 
$_extensions = array();

    public function 
__construct()
    {
        return;
    }

    public function 
__destruct()
    {
        return;
    }

    public function 
add($Class)
    {
        
$this->_extensions[] = $Class;
    }

    public function 
__get($Name)
    {
        foreach(
$this->_extensions as $extension)
        {
            if (
property_exists($extension$Name))
                return 
$extension->$Name;
        }
    }

    public function 
__call($Method$Arguments)
    {
            foreach(
$this->_extensions as $extension)
            {
                if (
method_exists($extension$Method))
                    return 
call_user_method_array($Method$extension$Arguments);
            }

        throw new 
Exception("This method {$Method} doesn't exists.");
    }

درایور:
کد پی‌اچ‌پی:
class Ext1
{
    private 
$name '';
    private 
$id '';
    public function 
setID($id) {$this->id $id;}
    public function 
setName($name) {$this->name $name;}
    public function 
getID() {return $this->id;}
    public function 
getName() {return $this->name;}
}

class 
Ext2
{
    private 
$address '';
    private 
$country '';
    public function 
setAddress($address) {$this->address $address;}
    public function 
setCountry($country) {$this->country $country;}
    public function 
getAddress() {return $this->address;}
    public function 
getCountry() {return $this->country;}

آداپتور/موتور:
کد پی‌اچ‌پی:
class Extender extends ExtensionBridge
{
    function 
__construct()
    {
        
parent::add(new Ext1());
        
parent::add(new Ext2());
    }

    public function 
__toString()
    {
        return 
$this->getName().', from: '.$this->getCountry();
    }
}

$o = new Extender();
$o->setName('Ehsan');
$o->setCountry('Iran');
echo 
$o
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : zoghal
#2
یه ایرادی که در مورد کلاس ExtensionBridge بنظرم می رسه اینه که، ممکنه ۲ تا یا بیشتر تا کلاس داشته باشیم که property یا متد هم اسمی داشته باشن (منظور تو کلاس های (Ext(N ها باشه)
تو این شرایط چه اتفاقی می افته؟ Huh
اینجا فقط متد یا پراپرتی های اولین کلاس (Ext1) که تو لوپ بهش برخورد می کنه رو بر می گردونه چون به صراحت تعیین نشده از کدوم کلاس/(Ext(N موارد خواسته شده رو برگردونه (شاید بخواییم از متد/پراپرتی کلاس دیگه بغیر از Ext1 استفاده بشه)

یا اینطور نیست؟
  پاسخ
تشکر شده توسط : Y.P.Y Reza zoghal
#3
روش جدید این موضوع رو کولکشن آبجکت میگند. و از spl هم بهره بردند. که این موارد رو حل کرده.
  پاسخ
تشکر شده توسط : hosseintdk775 hidensoft


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان