2017-02-26 120 views
1
<?php 

class getCatlist 
{ 
    function catList() 
    { 
     global $db; 

     try {    
      $stmt2 = $db->query("SELECT c.id, c.name, c.slug, c.parent, COUNT(b.catID) AS Total FROM categories c LEFT JOIN blog_post_cats b ON b.catID = c.id GROUP BY c.id HAVING Total > 0");       
      $row_count = $stmt2->rowCount(); 
      if ($row_count >= 0) { 
       $rows = $stmt2->fetchAll(PDO::FETCH_ASSOC);     
      }   

     } catch (PDOException $e) { 
      echo $e->getMessage(); 
     } 

     $items = $rows; 
     $id = ''; 
     echo "<ul>"; 
     foreach ($items as $item) { 
      if ($item['parent'] == 0) {    
       echo "<li><a href='category-".$item['slug']."'>".$item['name']." (".$item['Total'].")</a>"; 
       $id = $item['id']; 
       sub($items, $id); 
       echo "</li>";    
      } 
     } 
     echo "</ul>";  
    } 

    function sub($items, $id){   
     foreach ($items as $item) { 
      if ($item['parent'] == $id) {     
       echo "<ul>";         
       echo "<li><a href='category-".$item['slug']."'>".$item['name']." (".$item['Total'].")</a></li>";   
       sub($items, $item['id']); 
       echo "</ul>"; 
      } 
     }   
    } 
} 
?> 

我調用這個類與這些function catList()和功能sub($items, $id)調用未定義功能類

與:

<?php 
    $cat = new getCatlist(); 
    $cat->catList(); 
    $cat->sub();  
?> 

但服務器給我這個錯誤:調用未定義的函數子()。那麼我的代碼有什麼問題?我想念什麼?以及如何定義這個:function sub()。

我試過並從類的東西搜索這種調用方法,但我沒有解決我的問題。所以我希望我在這裏找到解決方案。謝謝。

回答

2

相同的錯誤可以與這樣的代碼更小的位被再現:

<?php 

class Foo{ 
    public function baz(){ 
     bar(); 
    } 

    public function bar(){ 
     echo "boo"; 
    } 
} 

$foo = new Foo(); 

$foo->baz(); 

PHP Fatal error: Uncaught Error: Call to undefined function bar() in /home/hpierce/PhpstormProjects/Temp/addNumbers.php:5

即誤差被談論的參考bar()上第五線,存儲在所述類中,在Foo對象上的方法調用:

class Foo{ 
    public function baz(){ 
     bar(); //<--- This! 
    } 

//... 
} 

$foo->baz(); // <-- NOT this. 

在PHP中,從引用類中的一個類的方法需要第e函數調用前綴爲$this->。如果不使用該PHP,則嘗試使用全局名稱空間中定義的函數,其中沒有名爲sub()的函數。

這與Java等語言不同,其中功能可以被引用而沒有明確的自引用。

上面的代碼可以固定這樣的:

<?php 

class Foo{ 
    public function baz(){ 
     $this->bar(); 
    } 

    public function bar(){ 
     echo "boo"; 
    } 
} 

$foo = new Foo(); 

$foo->baz(); 
+0

仍不明確的功能子()\t 我想你的解決方案:我認爲它會工作,但:缺少參數1 getCatlist ::子()併爲getCatlist :: sub()缺少參數2。那麼現在呢? –

+0

那個錯誤信息很清楚不是嗎? '$ cat-> sub()'不包含任何參數,但方法簽名**需要**兩個參數。 – HPierce

+0

所以它必須是$ cat-> sub($ items,$ id)是不是? –