• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فراخوانی تابع داخل یک کلاس
#1
سلام دوباره

من یک تابع نوشتم که با اون میتونم تمام منوها و زیر منوهارو خروجی نشون بدم حالا میخوام از این تابع درون کلاس استفاده کنم به این شکل
تابع نوشته شده خودم که در صورت استفاده بدون کلاس درست کار میکنه

کد پی‌اچ‌پی:
function menu($user_id,$level=0)
{
    global 
$db;
    
$count=0;
    
$q1$db -> fetch_all("select * from `menu_product` where parent_id='{$level}' && id_admin='{$user_id}' ");
    foreach(
$q1 as $q1)
    {
        
$count++;
        
$name=$q1['menu_name'];
        
$id=$q1['id'];
        echo 
'<li><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$name.'</a>';
        
$q2$db -> rowcount("select * from `menu_product` where parent_id='$id' ");
        if(
$q2>=0)
        {
            echo 
'<ul class="dropdown-menu">';
                
menu($user_id,$id);
            echo 
'</ul>';
        }
        echo 
'</li>';    
    }

و اینم از کلاسی که دارم از تابع داخلش استفاده میکنم (نمونه ساده)

کد پی‌اچ‌پی:
class Menu_view
{
    public function 
menu($user_id,$level=0)
    {
        global 
$db;
        
$count=0;
        
$q1$db -> fetch_all("select * from `menu_product` where parent_id='{$level}' && id_admin='{$user_id}' ");
        foreach(
$q1 as $q1)
        {
            
$count++;
            
$name=$q1['menu_name'];
            
$id=$q1['id'];
            echo 
'<li><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$name.'</a>';
            
$q2$db -> rowcount("select * from `menu_product` where parent_id='$id' ");
            if(
$q2>=0)
            {
                echo 
'<ul class="dropdown-menu">';
                    
menu($user_id,$id);
                echo 
'</ul>';
            }
            echo 
'</li>';    
        }
    }




حالا اینجا فقط میاد اولین منو رو میخونه وقتی میخواد زیر منو رو بخونه نمیتونه و باعث میشه بقیه کد های بعد از این تابع اجرا نشن حتی html

خروجی به این شکل هست مثلا ما 10 تا منو داریم اولین منو خونده میشه بقیه نمایش داده نمیشن
وقتی تابع دوم رو بر میدارم درست هست و تمام منو هارو میخونه
اشکال از فراخوانی تابع دوم هست
چرا؟
  پاسخ
تشکر شده توسط :
#2
مشکل از تابع منه یا یه چیز دیگس؟
اینجا حتما یه نکته ای هست که من فراموش کردم ؟
  پاسخ
تشکر شده توسط :
#3
طرز طرح سوالم بده یا اینکه کلا اشتباه هست؟HuhHuhHuh
  پاسخ
تشکر شده توسط :
#4
- آخه شما کلاً Model view ctrler همه رو با هم و یکجا نوشتی، اینه که مطالعه و بررسی کدت سخته
- هیچ ساختاری هم از جدول منو هات وجود نداره
- هیچ دید و تصویری هم نسبت به منویی که مد نظرته نداریم

http://www.codingcage.com/2015/03/dynami...p-and.html
وبلاگ: Yousha.Blog.ir


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

  پاسخ
تشکر شده توسط : kasbookar
#5
ببینید تابع اولی که گذاشتم کاملا سالم هست و در حالت عادی درست کار میکنه (یعنی بدون اینکه در داخل کلاسی قرار دهم و با فراخوانی تابع به صورت زیر
کد پی‌اچ‌پی:
menu() 
)وصل میشه دیتابیس و تمام منو ها و زیر منو هارو خروجی نشون میده

ولی الان میخوام من این تابع رو داخل کلاس استفاده کنم ولی داخل کلاس گذاشتنی کار نمیکنه نمیدونم چرا
اگر داخل کلاس از این تابع بخوایم استفاده کنیم باید اول کلاس رو نیو کنیم به این شکل درسته

کد پی‌اچ‌پی:
$test = new -> Menu_view

بعدش به این شکل هم از تابع داخل کلاس استفاده میکنیم
به این شکل

کد پی‌اچ‌پی:
echo $test -> menu(); 

در کل کار من رو تابع بالایی کاملا راه میندازه ، میخوام بدونم چرا تابع داخل کلاس درست کار نمیکنه؟
  پاسخ
تشکر شده توسط :
#6
عجیبه...

اول اینکه متد menu در این وسط اصلاً کار می کنه؟ چطوری call می کنیش؟
کد پی‌اچ‌پی:
echo '<ul class="dropdown-menu">';
                    
menu($user_id,$id);
                echo 
'</ul>'
Fatal error: Call to undefined function menu()

دوم اینکه چرا اینطوری شی میسازی؟
کد پی‌اچ‌پی:
$test = new -> Menu_view(); 
Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in

از PHP 7 استفاده می کنی؟

این روش رو امتحان کن:
کد پی‌اچ‌پی:
class Menu_view
{
    public function 
__construct()
    {
        
$testVar = function()
        {
            
// menu content.
        
};
    }

وبلاگ: Yousha.Blog.ir


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

  پاسخ
تشکر شده توسط :
#7
نقل قول:عجیبه...
Big Grin من کلا کارام عجیبه ، عجیب کد میزنم ، عجیب مهربونم و خیلی عجیب های دیگه که اطرافیانم هم میگن . خخخخ

نقل قول:اول اینکه متد menu در این وسط اصلاً کار می کنه؟ چطوری call می کنیش؟
کد PHP:
echo '<ul class="dropdown-menu">';
menu($user_id,$id);
echo '</ul>';
Fatal error: Call to undefined function menu()

خب چیکار کنم پس تمام زیر منو هارو هم بخونه؟؟ این تابع که نوشتم در حالت عادی میاد اول سرگروه منوهارو میخونه و بعد با توجه به پرنت ایدی ثبت شده خود منو فراخونی میشه و زیر منوهاش هم لود میشن حالا هر چنتا زیر منو تودر تو هم میخواد باشه ، تابع درست کار میکنه (البته با استفاده به صورت تابع خالی در خروجی ولی اگه بخوام یک شی بسازم ازش تابع کار نمیکنه)
برای مثال منوی لینک زیر رو ببینید که چند سطحی هست
http://css3menu.com/facet-celadon-vertical.html
این تابع دقیقا به این روش کار میکنه

نقل قول:دوم اینکه چرا اینطوری شی میسازی؟
کد PHP:
$test = new -> Menu_view();
Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in

از PHP 7 استفاده می کنی؟

همونطور که گفتم این یک کلاس ساده هست که اینجا گذاشتم کلاس اصلی خیلی کد داره که فقط نمونه گذاشتم تا منظورمو برسونم
بعدشم من که اونطوری شی نساختم چرا حرف دهن مردم میذاری برادر Smile) Smile)
من اینطوری شی رو میسازم اون بالا هم گفتم
اینطوری

کد پی‌اچ‌پی:
$test = new -> Menu_view

و اینطوری از تابع داخلش استفاده میکنم
کد پی‌اچ‌پی:
echo $test -> menu(); 

ورژن php (PHP Version 5.6.23
)
هست Smile))

اونطوری هم کار نکردBig GrinTongue

شما منو و زیر منو کد زدید به صورت شی گرا؟ من که اولین بارمه میخوام از داخل کلاس این تابع رو فراخونی کنم Huh
  پاسخ
تشکر شده توسط : Y.P.Y


پرش به انجمن:


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