• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
این رجیستری چه طوره ؟
#1
تغییرات جدید

رجیستری
کد پی‌اچ‌پی:
<?php
## location ./registry.php

final class regi{

    private 
$registry = array();
    private static 
$instance null;
    
    public static function 
stry()
    {
        if(
is_null(self::$instance))
        {
            
self::$instance = new regi;
        }
        return 
self::$instance;
    }
    
    public function 
__set($var$parm)
    {
        if(isset(
$this->registry[$var]))
            echo 
"$var was setted";
        else
            
$this->registry[$var] = $parm;
    }
    
    public function 
__get($var)
    {
        return 
$this->registry[$var]; 
    }
    
    public  static function 
ster($var NULL)
    {
        if( ! 
is_null($var))
        {
            if(
is_object($var))
                
regi::stry()->{get_class($var)} = $var;
            else
                
regi::stry()->{$var} = new $var();
        }
    }
    
}


interface 
registry
{
    public static function 
register();
}

function 
__autoload($class_name
{
    require_once 
dirname(__FILE__).'/classes/'.$class_name '.php';



تست2 (کلاس هسته که شامل اعمال تنظیمات قبل از گرفتن آبجکت میشود مثل دیتابیس یا لاگ ارور)
کد پی‌اچ‌پی:
<?php
## location : classes/test2.php

class test2 implements registry{

    public 
$num '123';
    
    
    
// اعمال تنظيمات ، گرفتن يک آبجکت
    
static public function register()
    {
        
$obj = new test2;
        
$obj->num 45;
        
        
regi::ster($obj);
    }
    
    function 
name()
    {
        return 
'reza';
    }




تست (کلاسهای شوت Big Grin مثلاً یه هلپر فایل و ...)
کد پی‌اچ‌پی:
<?php
## location : classes/test.php

class test{
    
    
    function 
sum($x,$y)
    {
        return 
$x $y ;
    }



استفاده
کد پی‌اچ‌پی:
<?php
## location : ./index.php

include './registry.php';


// کلاس غیر از هسته
regi::ster('test');

// کلاس هسته
test2::register();

echo 
regi::stry()->test->sum(1,8);
echo 
regi::stry()->test2->name();
echo 
regi::stry()->test2->num;

//print_r(regi::stry()); 

ابهامی هست بگید .
  پاسخ
تشکر شده توسط : undefined webnevesht ali786
#2
نقل قول:تشکر شده توسط : Ehsan webnevesht ali786
بابا دارم یه کلاس رجیستری مینویسم برای سیستم .
یه نظر بدید ، تشکر میخوام چیکار .Dodgy
  پاسخ
تشکر شده توسط :
#3
به کلاس رجیستری راسپینا یه نگاهی بنداز، کار یوشاست.

کد:
https://gitorious.org/raspina/raspina/blobs/master/library/Raspina/Registry/Registry.php
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#4
بذارش اینجا .
  پاسخ
تشکر شده توسط :
#5
کد پی‌اچ‌پی:
final class registry
{
    protected 
$registry NULL;

    public function 
__call($method$arguments)
    {
        return 
call_user_func_array(array($this->registry$method), $arguments);
    }

    
# public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
    
public function __construct($array = array())
    {
        
# parent::__construct($array, $flags);
        # return;
    
}

    public function 
__destruct()
    {
        unset(
$this->registry);
        return;
    }

    public function 
reset()
    {
        
$this->registry = array();
    }

    public function 
add($name$value)
    {
        
$this->registry[$name] = $value;
        return;
    }

    public function 
addMultiple($input = array())
    {
        if(
is_array($input) || is_object($input))
        {
            foreach(
$input as $key=>$value)
            {
                
$this->add($key$value);
            }
        }

        return;
    }

    public function 
addDefault($name$defaultValue NULL)
    {
        return 
$this->add($name$this->get($name$defaultValue));
    }

    public function 
remove($name)
    {
        unset(
$this->registry[$name]);
        return;
    }

    public function 
removeMultiple($input NULL)
    {
        if(
is_array($input) || is_object($input))
        {
            foreach(
$input as $value)
            {
                
$this->remove($value);
            }
            return;
        }

        return 
FALSE;
    }

    public function 
exists($name)
    {
        return isset(
$this->registry[$name]);
    }

    public function 
existsInArray($object$name)
    {
        if(
$this->exists($name) && @in_array($object$this->registry[$name]))
        {
            return 
TRUE;
        }

        return 
FALSE;
    }

    public function 
get($name)
    {
        if(
array_key_exists($name$this->registry))
        {
            return 
$this->registry[$name];
        }

        return 
NULL;
    }

    public function 
getClass()
    {
        return 
get_class($this->registry);
    }

    public function 
toString()
    {
        return (string)
get_class($this);
    }

    public function 
toArray()
    {
        return (array)
$this->registry;
    }

    public function 
toObject()
    {
        return (object)
$this->registry;
    }

هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Reza
#6
Cool
اینو ول کن ، روی اون چیزی که من نوشتم نظر بده Tongue
  پاسخ
تشکر شده توسط :
#7
چشم Wink
اما یه مقدار صبر کن. شرمنده Blush
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : Reza
#8
میشه توضیح بدی این کد چیکار میکنه؟ من ِ آماتور سر در نمیارم آخهBig Grin
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#9
دارم یه سیستم رو از بیس مینویسم .
کلاس رجیستری ، یک کلاس که وظیفه اش اینه توی سرتاسر اسکرپیت دست به دست میچرخه و آبجکت هایی رو که میگیری نگه داری میکنه .
یه مثال ساده اش ، فرض کن توی اسکریپت ، کنترلرها و مدل ها مختلفی داری .
ممکنه یه کنترلر از یک مدل استفاده کنه ، و یکی دیگه از سه تا مدل .
توی تموم اینها تو به دیتابیس احتیاج داری ، اگه قبل از فراخوانی تموم اینها ، آبجکت دیتابیس رو رجیستری گرفته باشه ، توی تموم اینها استفاده میشه ، در غیر اینصورت باید توی هر کدم از اینها یک بار آبجکت بگیری ، که مثلاً توی 10 تا اینکلود ، میشه 10 تا آبجکت Tongue
این کلاس رجیستری من یه خورده بهش آب و تاب دادم .
مثلاً هر جا بخوای از دیتابیس استفاده کنی ، مینویسی
کد پی‌اچ‌پی:
db::register(); 
سپس بقیه کارها رو انجام میدید .
کد پی‌اچ‌پی:
regi::stry()->db->query("SELECT * FROM POST");

$result regi::stry()->db->select('*')->from('post')->result(); 

دیگه خودش چک میکنه که قبلاً آبجکت گرفته شده یا نه .

خوبیهای دیگه ام داره .
دیگه نمیخواد هی include کنی و ...
مثلاً فایل کلاس mail رو میذاری توی پوشه classes و از این ور
کد پی‌اچ‌پی:
regi::ster('mail');
regi::stry()->mail->sendmail('some things'); 

خوبیهای دیگه ای هم داره
هر جای اسکریپت برای دیباگ میتونی ببینی چه کلاسهایی لود شده و استفاده میشه .
ممکنه بعضی جاها کلاس اضافه ای استفاده بشه که میتونی حذفش کنی و ...

البته هنوز تکمیلش نکردم کامل (منتظر نظر دوستان هستم ببینم در کل نظرشون چیه ! )
  پاسخ
تشکر شده توسط : webnevesht undefined
#10
خیلی عالیه...دوست دارم یاد بگیرم و بیشتر بدونمBlush
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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