النتائج 1 إلى 8 من 8

الموضوع: هل يوجد احد قراءة كود اطار عمل codeigniter؟

  1. #1
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109

    هل يوجد احد قراءة كود اطار عمل codeigniter؟



    بسم الله الرحمن الرحيم
    هل يوجد احد قراءة كود اطار عمل codeigniter؟

    عشان عاوذ اعرف حاجة فيه وهي داله get_instance
    اذاى جابة المتغيرات الي في داخلة هي عيارة عن متغير داخل كلاس ليسى به اي متغيرات تحمل قيم
    كود PHP:
    class CI_Base {

        private static 
    $instance;

        public function 
    CI_Base()
        {
            
    self::$instance =& $this;
        }

        public static function &
    get_instance()
        {
            return 
    self::$instance;
        }
    }
    function &
    get_instance()
    {
        return 
    CI_Base::get_instance();







    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    تستخدم هذه الطريقة لجعل محتويات الكائن متاحة للاستخدام من خارج هذا الكائن.
    و تستخدم للتغلب على أن التوريث مقيد بـ كلاس واحدة فقط.

    الطريقة:

    1- من المعروف أنه يمكننا ربط المتغيرات ببعضها باستخدام =&
    كود PHP:
    $a 'aaa';

    echo 
    $b."\n";

    $b =& $a;

    $b 'bbb';

    echo 
    $a
    وهذا ما تم عمله في كائن CI_Base حيث تم ربط جميه محتوياته بمتغير ستاتيك
    كود PHP:
    self::$instance =& $this
    2- يمكن ربط القيمة التي ترجعها الدالة return بمتغير ما بوضع & قبل اسمها عند التعريف وعند الطلب
    كود PHP:
    $value 'aaa';

    function &
    change_value(){
        global 
    $value;
        
        return 
    $value;
    }

    $var = &change_value();

    echo 
    $var."\n";

    $var 'bbb';

    echo 
    $vallue
    وهذا ما تم عمله في get_instance الموجودة داخل الكائن الرئيسي حيث تقوم بارجاع فيمة المتغير instance الذي يحتوي على نسخة من الكائن بأكمله، وجعلها ستاتيك حتى يمكن الوصول لها من خارج الكائن.

    3- ثم تم عمل نفس الخطوة 2 مع الدالة الخارجية get_instance حيث تقوم بارجاع نسخة من الكائن مع ربطها أيضا.

    4- للوصول لمحتويات الكائن (قراءة و تعديل) من الخارج نقوم بطلب دالة get_instance الخارجية.
    كود PHP:
    $obj =& get_instance(); 

    * هذه العملية ليست مرتبطة ب CodeIgniter لأنها تستخدم في أطر عمل كثيرة للتغلب على قيد التوريث باستخدام كلاس واحدة ولجعل المحتوى متاح للاستخدام من خارج الكائن الرئيسي.

    * في الخطوة 2 لماذا لم يتم طلب المتغير instance مباشرة من الدالة الخارجية get_instance؟
    لأننا في هذه الحالة سنتمكن من القراءة دون التعديل. يجب أن يتم التعديل باستخدام دالة من داخل الكائن. local يعني.

    * في المثال في الخطوة 2 ايضا تم استخدام متغير value و جلب فيمته باستخدام global وذلك لتوضيح الفكرة، لكن يمكنك ارجاع متغير بالطريقة التي تحتاجها.





    __________________
    محمد حمود.

  3. #3
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    تستخدم هذه الطريقة لجعل محتويات الكائن متاحة للاستخدام من خارج هذا الكائن.
    و تستخدم للتغلب على أن التوريث مقيد بـ كلاس واحدة فقط.

    الطريقة:

    1- من المعروف أنه يمكننا ربط المتغيرات ببعضها باستخدام =&
    كود PHP:
    $a 'aaa';

    echo 
    $b."\n";

    $b =& $a;

    $b 'bbb';

    echo 
    $a
    وهذا ما تم عمله في كائن CI_Base حيث تم ربط جميه محتوياته بمتغير ستاتيك
    كود PHP:
    self::$instance =& $this
    2- يمكن ربط القيمة التي ترجعها الدالة return بمتغير ما بوضع & قبل اسمها عند التعريف وعند الطلب
    كود PHP:
    $value 'aaa';

    function &
    change_value(){
        global 
    $value;
        
        return 
    $value;
    }

    $var = &change_value();

    echo 
    $var."\n";

    $var 'bbb';

    echo 
    $vallue
    وهذا ما تم عمله في get_instance الموجودة داخل الكائن الرئيسي حيث تقوم بارجاع فيمة المتغير instance الذي يحتوي على نسخة من الكائن بأكمله، وجعلها ستاتيك حتى يمكن الوصول لها من خارج الكائن.

    3- ثم تم عمل نفس الخطوة 2 مع الدالة الخارجية get_instance حيث تقوم بارجاع نسخة من الكائن مع ربطها أيضا.

    4- للوصول لمحتويات الكائن (قراءة و تعديل) من الخارج نقوم بطلب دالة get_instance الخارجية.
    كود PHP:
    $obj =& get_instance(); 

    * هذه العملية ليست مرتبطة ب CodeIgniter لأنها تستخدم في أطر عمل كثيرة للتغلب على قيد التوريث باستخدام كلاس واحدة ولجعل المحتوى متاح للاستخدام من خارج الكائن الرئيسي.

    * في الخطوة 2 لماذا لم يتم طلب المتغير instance مباشرة من الدالة الخارجية get_instance؟
    لأننا في هذه الحالة سنتمكن من القراءة دون التعديل. يجب أن يتم التعديل باستخدام دالة من داخل الكائن. local يعني.

    * في المثال في الخطوة 2 ايضا تم استخدام متغير value و جلب فيمته باستخدام global وذلك لتوضيح الفكرة، لكن يمكنك ارجاع متغير بالطريقة التي تحتاجها.
    جزاك الله خيرا اخي الكريم
    نعم فاهم الحكاية دية ولكن انا اقصد ان محتوى الكلاس عبارة عن متغير واحد وفيه قيمة الكلاس فقط
    ولكن عند الاستخدام يوجد به متغيرات اخرة وانا شايف انه مش واخد وراثة من اي كلاس اخر
    ولكن جربة اطبع المحتوى وجد ان القيمة الراجعه من الداله هي قيمة الكلاس المتحكم الي انا مستخدمة مثل كلاس
    welcome
    فاعملة كلاس اخر ووجد انه بيرجع كلاس المتحكم الي انا فيه في مش فاهم ازاى جاب هذا القيمة وهو مش موروث منه او انشاء كائن جديد منه جرب قومة بطباعة محتوى الداله بس بعد استدعاء الكلاس المتحكم في صفحة
    CodeIgniter /CodeIgniter.php
    وشوف الناتج وانت تفهم اية الي اقصدة بظبط





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    المتحكم welcome يعمل extend لل Controller وال Controller بيعمل extend لل Ci_Base

    لذلك يمكن القول مجازا بأن محتويات الثلاث كائنات تم دمجهم في كائن واحد

    و قيمة المتغير instance تتغير عند تغير قيمة الكلاس Ci_Base لذلك يمكنك الوصول لمحتويات ال3 كائنات من get_instance

    اتمنى ان اكون استوعبت السؤال جيدا.





    __________________
    محمد حمود.

  5. #5
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    المتحكم welcome يعمل extend لل Controller وال Controller بيعمل extend لل Ci_Base

    لذلك يمكن القول مجازا بأن محتويات الثلاث كائنات تم دمجهم في كائن واحد

    و قيمة المتغير instance تتغير عند تغير قيمة الكلاس Ci_Base لذلك يمكنك الوصول لمحتويات ال3 كائنات من get_instance

    اتمنى ان اكون استوعبت السؤال جيدا.
    جزاك الله خير اخي الكريم
    نعم انا فاهم ديةبس ازاى الداله اخدية قيمة الكلاس welcome وهي بتعيد قيمة المتغير الي في كلاس Ci_Base

    ده مثال
    كود PHP:
    <?php
    //الكلاس الرئيسى
    class m{
        static private 
    $var;
        function 
    __construct(){
            
    self::$var=$this;
        }
        function &
    return_var(){
            return 
    self::$var;
        }
    }
    function & 
    return_var(){
        return 
    m::return_var();
    }

    class 
    extends m{
        protected 
    $name="mohamed";
        function 
    __construct(){
            
    parent::__construct();
        }
    }
    class 
    extends A{
        public 
    $name2="helal";
        function 
    __construct(){
            
    parent::__construct();
        }
    }

    echo
    "<pre>";
    print_r(return_var());
    ?>
    انا عاوذ الداله return_var تعيد قيم الثلاثة كلاسات فما هي الطريقة ؟
    عرفة الطريقة وهي انى لازم اقوم بانشاء الكائن الاخير مثل كده
    كود PHP:
    $B=new B();
    echo
    "<pre>";
    print_r(return_var()); 
    كده بيقوم بتفيذ الكود ويغير قيمة المتغير
    جزاك الله خيرا اخي الكريم كده الحمد لله فيهمة
    بس في سؤال من التجربة دية ان بيتم تغير محتوى الكلاس الرئيسيى مع تغير الكلاسات المورثة له ؟





    التعديل الأخير تم بواسطة محمدهلال ; 05-05-2010 الساعة 01:01 PM
    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    - بالطبع عزيزي يجب ان انشاء نسخة من الكائن حتى يتم طلب الconstructors و اعطاء قيمة لـ $var.

    - و عند التغيير في كائن من الثلالة -أو الكائنات الاخرى التي تربط بهم بنفس الطريقة- يتم أيضا تغيير القيمة الراجعة في return.

    * هناك طريقة أخرى استخدمتها -نظرا للكسل في كتابة الاكواد
    كود PHP:

    //الكلاس الرئيسى
    class m{
        
        function 
    __construct(){
            
        }
      
    }

    function &
    get_instance($class=null){
        static 
    $instance false;
        
        if(!
    is_object($instance)){
            
    $instance = new $class();
        }
        
        return 
    $instance;
    }

    class 
    extends m{
        protected 
    $name="mohamed";
        function 
    __construct(){
            
        }
    }
    class 
    extends A{
        public 
    $name2="helal";
        function 
    __construct(){
            
        }

    هنا كل الشغل تم من الخارج، و لا يهم أن نستدعي الcontructors.

    لانشاء ال object في أول مرة نقوم بتمرير اسم المتحكم الى الدالة
    كود PHP:
    $obj = &get_instance('B'); 
    و للوصول لمحتويات الكائن من الخارج نطلب الدالة هكذا
    كود PHP:
    $obj2 = &get_instance(); 






    __________________
    محمد حمود.

  7. #7
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    بس في سؤال من التجربة دية ان بيتم تغير محتوى الكلاس الرئيسيى مع تغير الكلاسات المورثة له ؟
    نعم يتغير محتوى الكلاس حسب اللاسات المورثة له ، مثلا اذا ورثت محتويات الكلاس a للكلاس b و محتويات الكلاس c للكلاس b ستكون جميع محتويات الكلاسات متاحة في الكلاس b بجميع متغيراتها .
    هذا و الله أعلم ، انا خبير بالـ CI و هذا يرجع الى فضل الله اولا ثم فضل مصعب الزيني ثانيا جزاه الله خيراً .





    التعديل الأخير تم بواسطة وضاء ; 06-05-2010 الساعة 04:06 PM
    __________________
    راسلني

  8. #8
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    - بالطبع عزيزي يجب ان انشاء نسخة من الكائن حتى يتم طلب الconstructors و اعطاء قيمة لـ $var.

    - و عند التغيير في كائن من الثلالة -أو الكائنات الاخرى التي تربط بهم بنفس الطريقة- يتم أيضا تغيير القيمة الراجعة في return.

    * هناك طريقة أخرى استخدمتها -نظرا للكسل في كتابة الاكواد
    كود PHP:

    //الكلاس الرئيسى
    class m{
        
        function 
    __construct(){
            
        }
      
    }

    function &
    get_instance($class=null){
        static 
    $instance false;
        
        if(!
    is_object($instance)){
            
    $instance = new $class();
        }
        
        return 
    $instance;
    }

    class 
    extends m{
        protected 
    $name="mohamed";
        function 
    __construct(){
            
        }
    }
    class 
    extends A{
        public 
    $name2="helal";
        function 
    __construct(){
            
        }

    هنا كل الشغل تم من الخارج، و لا يهم أن نستدعي الcontructors.

    لانشاء ال object في أول مرة نقوم بتمرير اسم المتحكم الى الدالة
    كود PHP:
    $obj = &get_instance('B'); 
    و للوصول لمحتويات الكائن من الخارج نطلب الدالة هكذا
    كود PHP:
    $obj2 = &get_instance(); 
    جزاك الله خيرا اخي الكريم
    ديه اول مرة اعرف فيه المعلومة دية

    نعم يتغير محتوى الكلاس حسب اللاسات المورثة له ، كاذا ورثت محتويات الكلاس a للكلاس b و محتويات الكلاس c للكلاس b ستكون جميع محتويات الكلاسات متاحة في الكلاس a بجميع متغيراتها .
    هذا و الله أعلم ، انا خبير بالـ CI و هذا يرجع الى فضل الله اولا ثم فضل مصعب الزيني ثانيا جزاه الله خيراً .
    جزاك الله خيرا اخي الكريم





    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض