تالار گفتمان nCIS.ir

نسخه‌ی کامل: عدم شناسایی یک متد در کلاس
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
من این کلاس رو تعریف کردم ،
<?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:laragonwwwshop2header.php on line 81
اول اینکه کد کلاس رو اینطوری اصلاح کنید:
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 رو رعایت کنید خیلی از این مشکلات رفع میشه.