رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
عدم شناسایی یک متد در کلاس
#1
من این کلاس رو تعریف کردم ،
<?php
/**
* 
*/
 final class Category extends DB
{



  Public function Read($parent=NULL) {
    if(!$parent) {
      return $this->ArrayQuery("SELECT * FROM Category WHERE parent_id IS NULL AND hidden='0' ");
    }
    $parent= $this->Escape($parent);
    return $this->ArrayQuery("SELECT * FROM Category WHERE parent_id='($parent)' AND hidden='0')");
  }
}

?>


و در صفحه موردنظر صداش زدم.
اما در خط دوم ، متد Read رو نمیشناسه !!!
علتش چیه ؟

<?php
$cat= new Category();
$categories= $cat -> Read();
// $categories= $db->ArrayQuery("SELECT * FROM category WHERE parent_id = NULL and hidden='0'  " ); 
foreach ($categories as $category) {
    $subcategories= $cat->Read($category['id']);
    if(count($subcategories)>0) {
        echo '<li class="dropdown">';
        echo '<a href= "' . ADDR. 'category.php?cat='. $category['id'] . '"  class="dropdown-toggle" data-toggle="dropdown" />';
        echo '<ul class="dropdown-menu">';
        foreach($subcategories as $category) {
            echo '<li><a href=" ' . ADDR. 'category.php?cat=' . $subcategories['id'] . '">'. $subcategories['name'] . '<span class="caret"></span></a>'; 
        }
        echo '</ul>';
        echo '</li>';
    }
    else {
        echo '<li><a href= "' .ADDR . 'category.php?cat=' . $category['id'] . '">' . $category['name']. '</a></li>';
    }
}
?>



خطا:

نقل قول:
Fatal error: Call to undefined method Category::Read() in C:\laragon\www\shop2\header.php on line 81
پاسخ
تشکر شده توسط:
#2
اول اینکه کد کلاس رو اینطوری اصلاح کنید:
final class Category extends DB
{
    public function read($parent = NULL)
    {
        if(!$parent) {
          return $this->arrayQuery("SELECT * FROM `category` WHERE (`parent_id` IS NULL AND `hidden`='0')");
        }
        $parent = $this->escape($parent);
        return $this->arrayQuery("SELECT * FROM `category` WHERE (`parent_id`='{$parent}' AND `hidden`='0')");
    }
}

اینجا دو نکته مهم وجود داره:
  1. اسامی متدها رو camelCase بنویسید (کلمه‌ی اول کاملاً با حروف کوچک و حرف اول کلمات دوم به بعد با حروف بزرگ و از _ استفاده نکنید).
  2. اسامی جداول و دیتابیس و فیلدها و... رو تماماً با حروف کوچک بنویسید.
  3. پرانتزهای شرط WHERE رو به شکل صحیح بگذارین.

اما درمورد مشکلتون حقیقتش مورد خاصی نمیبینم چون به‌ظاهر همه‌چیز درسته. فقط اون فاصله بین $cat و فلش و اسم متد بنظرم اضافه میاد. چک کنید شاید یه کلاس Category دیگه داره import میشه. منظورم اینه که اگه از AutoLoad استفاده کردین، چک کنید کلاس دیگری به همین نام نداشته باشین. بهتره از فضاهای نام (Namespace) برای تفکیک بهتر کلاسها استفاده کنید. بطور کلی اصول PSR-0 و PSR-4 رو رعایت کنید خیلی از این مشکلات رفع میشه.
پاسخ
تشکر شده توسط:




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