在Class中调用未定义的函数

时间:2017-02-26 00:25:42

标签: php

<?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()。

我尝试从课堂上搜索这种调用方法,但我没有解决我的问题。所以我希望我在这里找到解决方案。感谢。

1 个答案:

答案 0 :(得分:2)

使用较小的代码可以重现相同的错误:

<?php

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

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

$foo  = new Foo();

$foo->baz();
  

PHP致命错误:未捕获错误:调用未定义的函数栏()   /home/hpierce/PhpstormProjects/Temp/addNumbers.php:5

该错误正在讨论第5行的bar()引用,存储在类中, Foo对象上的方法调用:

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

//...
}

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

在PHP中,从类中引用类的方法要求函数调用以$this->为前缀。如果不使用PHP,则尝试使用全局命名空间中定义的函数,其中没有名为sub()的函数。

这与Java这样的语言不同,在这些语言中,可以引用而无需显式的自引用。

上面的代码可以修改如下:

<?php

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

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

$foo  = new Foo();

$foo->baz();