<?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()。
我尝试从课堂上搜索这种调用方法,但我没有解决我的问题。所以我希望我在这里找到解决方案。感谢。
答案 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();