2017-02-26 10 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();  
?> 

しかし、サーバーは、私は、このエラーを与える:未定義の関数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

というエラーがクラス内に格納された第5行にbar()を参照し、話している、ない Fooオブジェクトのメソッド呼び出し:

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

//... 
} 

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

PHPでは、クラス内のクラスのメソッドを参照するには、 e関数呼び出しの先頭に$this->を付けます。これを使用せずに、PHPはグローバル名前空間で定義された関数を使用しようとしています。ここにはという名前の関数はありません。

これは、関数が明示的な自己参照なしで参照されるJavaのような言語とは異なります。

上記のコードは次のように固定することができます。

<?php 

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

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

$foo = new Foo(); 

$foo->baz(); 
+0

まだ未定義の関数sub()\t 私はあなたのソリューションを試してみました:私はそのつもりが動作することだと思うけど:getCatlistための欠落引数1 ::サブ() getCatlist :: sub()の引数2がありません。だから今は何ですか? –

+0

そのエラーメッセージはかなり明確ですね。 '$ cat-> sub()'には引数が含まれていませんが、メソッドシグネチャ**には2つの引数が必要です。 – HPierce

+0

それは$ cat-> sub($ items、$ id)でなければなりませんか? –