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

الموضوع: كيف يمكن طلب دالة من خارج كلاس ما ونحن متواجدين بداخله؟؟

  1. #1
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,270

    كيف يمكن طلب دالة من خارج كلاس ما ونحن متواجدين بداخله؟؟



    السلام عليكم

    لدي class ولدي في ملف ثاني دالة واريد طلب هذه الدالى التي تتواجد بداخل ملف خارج الكلاس نفسو

    مثلا:

    ملف الكلاس اسمو class.php
    وملف الموجودة فيه الدالة هو: functions.php

    اريد طلب الدالة الموجودة في ملف functions.php من داخل الكلاس الموجود في ملف class.php


    اذا طلبت الدالة مباشرة من خلال الكلاس مع وضع include("functions.php"); يظهر لي الخلل التالي (وهم ان الدالة لا تنتمي الى الكلاس


    Fatal error: Call to a member function on a non-object in /functions.php on line 33


    ما الحل؟
    وشكرا





    __________________


    عاشت فلسطين وعاشت المقاومة
    http://www.palintefada.com/arabic
    http://www.palissue.com/arabic
    موقع انتفاضة فلسطين - موقع القضية الفلسطينية
    الكاسر



  2. #2
    عضو جديد
    تاريخ التسجيل
    Jun 2007
    المشاركات
    13


    السلام عليكم ورحمه الله وبركاته ،،،

    يمكنك ذلك بكل بساطة ،،، اليك المثال التالي :

    صفحة p1.php
    =============
    <?php
    include ("p2.php");
    class c1
    {
    function f1()
    {
    echo "hi all<BR>";
    f2();
    }
    };

    $v = new c1();
    $v -> f1();
    ?>

    صفحة p2.php
    =========
    <?php
    function f2()
    {
    echo "f2";
    }
    ?>

    امل ان يساعدك المثال ،،،

    اخوكم اياد صالح
    http://www.es-jo.com
    http://www.raselsms.com






  3. #3
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,270


    السلام عليكم

    هلا والله اخي اخوكم اياد صالح

    انا عامل تقريبا نفس الشي ولاكن بقلك انه الدالة لا ليست جزء من الكلاس!!!

    ولاكن ملاحظة انا لم اقم بوضع الدالة الخارجية في دالة داخلية لانه لا استطيع عمل ذلك

    عشان يكون الوضع اوضح عم بحاول عمل محرك بحث عن القوالب بسيط وسهل لموقعي فقط

    استخدمت درس للاخ daif.net وساعدني وعملت في القالب امر include
    <INCLUDE FILENAME="index.php">

    هناك في محرك البحث عن القواب يقوم بادراج ملف index.php
    ولاكن في ملف ال index.php موجود دالة وعند طلب هذه الدالة يظهر الخلل!!!!!
    فكيف حل لهذه المشكلة؟؟؟؟؟؟؟

    وشكرا





    __________________


    عاشت فلسطين وعاشت المقاومة
    http://www.palintefada.com/arabic
    http://www.palissue.com/arabic
    موقع انتفاضة فلسطين - موقع القضية الفلسطينية
    الكاسر


  4. #4
    عضو جديد
    تاريخ التسجيل
    Jun 2007
    المشاركات
    13


    هنا الخلل ،،، لانك وضعت الدالة داخل الكلاس مباشرة ،،، ولم تضعها داخل دالة داخل الكلاس ،،،

    فانصحك بانشاء دالة داخل الكلاس تقوم باستدعاء الدالة الموجودة في functions.php لانه لا يمكنك استعدائها بدون هاي الطريقة ،،، حسب تفكيري السريع خلال دقيقة ،،،

    ارجو ان تكون اجابتي نافعة ،،،

    اياد صالح
    http://www.es-jo.com
    http://www.raselsms.com






  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2007
    المشاركات
    393


    لدي class ولدي في ملف ثاني دالة واريد طلب هذه الدالى التي تتواجد بداخل ملف خارج الكلاس نفسو
    اللي فهمته عندك كلاس في ملف class.php
    كود PHP:
    include "functions.php";
    class 
    myClass
    {


    وانت الحين في صفحة ثانية وتبي تستدعي دالة في functions ??? طيب وش المشكلة ؟؟
    هي كانها كود عادي

    يعني لما تسوي انكلود للكلاس

    كود PHP:
    include "class.php"
    كانك سويت

    كود PHP:
    include "functions.php";
    class 
    myClass
    {


    وبالتالي تستعدي الدالة مباشرة بدون الكلاس :court:





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net

  6. #6
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,270


    السلام عليكم
    اخي فلاشر
    انا اريد استدعاء دالة من مبف ثانوي بينما اكون في داخل الكلاس
    استدعاء دالة خارجة عن الالكس بينما اكون متواجد داخل الكلاس





    __________________


    عاشت فلسطين وعاشت المقاومة
    http://www.palintefada.com/arabic
    http://www.palissue.com/arabic
    موقع انتفاضة فلسطين - موقع القضية الفلسطينية
    الكاسر


  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2007
    المشاركات
    393


    وضح اكثر يخوي مافهمت شئ ترى
    يعني وش الملفات اللي عندك وش الاكواد اللي فيها زي اللي في ردي ..

    قليل من التوضيح لوسمحت





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net

  8. #8
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,270


    السلام عليكم

    اسف لعدم التوضيح اليك الملفات

    اولا التالي هو كود الكلاس (كلاس البحث عن القوالب واستبدال المتغيرات واستبدال ملفات المدرجة)

    كود PHP:

    <?php
    include("functions.php");

    class 
    Template{

            var 
    $content= array();
            var 
    $vars;
            var 
    $tempname;
            var 
    $lunix_dir_temp="/home/user/public_html/dir/";

            function 
    GetTemplate($tempname)
              {
                    
    $this->tempname "$tempname";

                    
    $get_main_style=mysql_query("SELECT * FROM styles WHERE main='1'");
                    
    $row_style=mysql_fetch_array($get_main_style);

                    
    $get_temp=mysql_query("SELECT * FROM templates WHERE name='$tempname' AND styleid=".$row_style[id]." AND status=1") OR die(echodie());
                    
    $row_temp=mysql_fetch_array($get_temp);

                    
    $body $row_temp['template'];
                    
    $body stripslashes($body);

                    
    $this->content[$this->tempname] = stripslashes($body);

                    
    mysql_free_result($get_main_style);
                    
    mysql_free_result($get_temp);
                    unset(
    $row_style);
                    unset(
    $row_temp);
                    unset(
    $body);
              }

            
    //Function to FixTemplate the Template Tags
            
    function FixTemplate()
              {

                            
    //start loop
                            
    $this->content[$this->tempname] = preg_replace("'<LOOP NAME=\"([A-Za-z0-9_]+)\">'i",
                            
    "<? foreach(\$this->vars[\\1] as \$key=>\$var){ ?>",$this->content[$this->tempname]);

                            
    //end loop
                            
    $this->content[$this->tempname] = preg_replace("'</LOOP>'i","<? } ?>",
                            
    $this->content[$this->tempname]);


                            
    //Start IF Statement
                            
    $this->content[$this->tempname] = preg_replace("'<IF NAME=\"([A-Za-z0-9_]+)\">'i",
                                    
    "<? if(\$this->vars[\\1] == 1){ ?>",$this->content[$this->tempname]);

                            
    //end IF Statment
                            
    $this->content[$this->tempname] = preg_replace("'</IF>'i","<? } ?>",
                                    
    $this->content[$this->tempname]);

            
    // >>>>>>> انتبه هنا لكود ادراج الملف
                            //Include Statement
                            
    $this->content[$this->tempname] = preg_replace("'<INCLUDE FILENAME=\"([A-Za-z0-9_./]+)\">'i",
                                    
    "<? include(\"$this->lunix_dir_temp/\\1\"); ?>",$this->content[$this->tempname]);


                                        
    //Foreach Variables
                                       
    $this->content[$this->tempname] = preg_replace("'{{([A-Za-z0-9_]+)}}'","<? echo \$var[\\1] ?>",
                                            
    $this->content[$this->tempname]);

                                       
    //Variables
                                   
    $this->content[$this->tempname] = preg_replace("'{([A-Za-z0-9_]+)}'","<? echo \$this->vars[\\1] ?>",
                                            
    $this->content[$this->tempname]);
                                    }

                    
    //Function to Display template
                    
    function DisplayTemplate()
                    {

                            
    $this->vars = &$GLOBALS;
                            
    $this->FixTemplate();

                             
    ob_start();

                            
    //eval('?'.'>'.trim($this->content[$this->tempname]).'<'.'?');
                            
    eval('?'.'>'.trim($this->content[$this->tempname]).'<'.'?');

                            
    $this->content[$this->tempname] = ob_get_contents();
                            
    ob_end_clean();

                             print 
    $this->content[$this->tempname];

                    }
            }

    ?>


    الكود التالي هو كود ملف ال function.php

    كود PHP:
    <?php
    // ------------------------------------------ //
    //////////////// deny direct access to a file
    function deny_direct_access($file_name)
    {

    if (!
    eregi($file_name $PHP_SELF))
    {
        
    $die_message "<div align=\"center\"><strong>عفوا - لقد اتبعت رابطا غير صحيحاً بالدخول الى هنا</strong><br /><form><input type=\"button\" onclick=\"history.go(-1)\" value=\"العودة الى الخلف\"></form></div>";
        
    $tpl->GetTemplate("diepage");
        
    $tpl->DisplayTemplate();
        include(
    "footer.php");
        exit();
    }

    }


    ?>


    واخيرا كود القالب الذي يتم استبدال محتواه


    كود HTML:
    <div id="{column_size}">
    <INCLUDE FILENAME="columns/index_test.php">
    </div>

    ملف ال index_test.php
    موجود فيه التالي

    كود PHP:
    deny_direct_access("some_file.php"); 
    النتيجة تظهر بان الدالة deny_direct_access لا تنتمي الى الكلاس Template

    انشاء الله الان وضحت المشكلة؟





    __________________


    عاشت فلسطين وعاشت المقاومة
    http://www.palintefada.com/arabic
    http://www.palissue.com/arabic
    موقع انتفاضة فلسطين - موقع القضية الفلسطينية
    الكاسر


  9. #9
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,270


    السلام عليكم
    تم حل المشكلة والحمد لله

    تم وضع السطر التالي
    global $tpl, $PHP_SELF;
    في اول سطر للدالة

    شكرا للجميع





    __________________


    عاشت فلسطين وعاشت المقاومة
    http://www.palintefada.com/arabic
    http://www.palissue.com/arabic
    موقع انتفاضة فلسطين - موقع القضية الفلسطينية
    الكاسر


  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    475


    حسب اللي اشوفه ان الداله فعلا لا تنتمى للكلاس!





    __________________
    omansecurity.com
    Email: OmanSecurity AT gmail DOT com

  11. #11
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    اعتقد تقصد , معامل مدى المتغير Scope Resolution Operator هل هناك ترجمه أفضل ؟

    اذا كان لديك صنف وفي هذه الصنف دالة تريد ان تستخدمها بدون انشاء كائن من الصنف فعليك ان تستخدم هذه المعامل :: بي انس الصنف واسم الداله .
    كود PHP:
    <?
    calss ClassA
    {
        function 
    FunctionA(){
            print 
    "A";
        }
    }
    //هنا قمت بمنادة الداله داخل الصنف بدون انشائ كائن
    ClassA::FunctionA();
    ?>
    وكذلك يحدث مع المتغييرات, كل ما عليك هو ان تستدرج الملف الذي فيه الصنف
    المرجع http://www.php.net/manual/en/languag...ekudotayim.php





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .





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

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

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