未从 PHP class 获得所需的输出

Not getting desired output from PHP class

这实际上是我的第一个问题。我正在学习 OOP PHP 并尝试为类别设计我的第一个 class。这是我的代码

<?php
class category{

public  $catid;
public $datacol;

    public function __construct($catid=0)
    {
        $this->catid=0;
        $this->datacol=$this->load($catid);         
    }

    public function load($catid)
    {
        global $conn;
        $sql=' select * '
            .' FROM tbl_categories'
            .' WHERE catid='.$catid;
        if (!($res=mysqli_query($conn,$sql)) || !mysqli_num_rows($res)>0) 
            return false;
        $this->datacol = mysqli_fetch_array($res);
        $this->catid = $this->datacol['catid'];
        return true;
    }

    public function reload() {
        return $this->load($this->getId());
    }

    /* ------------------> Getter methods <--------------------- */
    public function getId() { return $this->catid; }
    public function getName() { return $this->datacol['category']; }
    public function getOneliner() { return $this->datacol['categoryoneliner']; }
    public function getBrief() { return $this->datacol['categorybrief']; }
    public function getThumb() { return $this->datacol['timg']; }
    public function getImage() { return $this->datacol['limg']; }
    public function getParentID() { return $this->datacol['parentcat']; }
    public function getPagetitle() { return  $this->datacol['catpagetitle']; }
    public function getKeywords() { return $this->datacol['catkeywords']; }
    public function getMetadesc() { return $this->datacol['categorymetadesc']; }
    public function getPriority() { return $this->datacol['priority']; }
    public function getRemarks() { return ($this->datacol['remarks']); }
    public function getRow() { return $this->datacol; }

}

?>

现在, 当我使用以下代码从其他文件创建其对象时:

$cat=new category(10);
echo var_dump($cat);
echo var_dump($cat->getId());
echo var_dump($cat->getName());

调用 getID() 时,输出为我提供了正确的 catid。但是对于 getName() 或 getID() 以外的任何其他函数显示 NULL。

我做错了什么?

提前致谢

好的 - 仔细看看你的函数:

public function load($catid)
{
    global $conn;
    $sql=' select * '
        .' FROM tbl_categories'
        .' WHERE catid='.$catid;
    if (!($res=mysqli_query($conn,$sql)) || !mysqli_num_rows($res)>0) 
        return false;
    $this->datacol = mysqli_fetch_array($res);
    $this->catid = $this->datacol['catid'];
    return true;
}

因此,您可以 returns 或 truefalse。这个布尔值在这里被分配给 $this->datacol

$this->datacol = $this->load($catid);     

由于此作业发生 在您完成 $this->datacol = mysqli_fetch_array($res); 之后 ,您的 $this->datacol 变为 truefalse,不包含来自 mysql.

的真实数据

所以,一个的解决方案可以是删除赋值:

public function __construct($catid=0)
{
    $this->catid=0;
    $this->load($catid);         
}

在这种情况下,您的 $this->datacol 不会被覆盖。

正如@Arnold Gandarillas 所说,您正在构造函数中覆盖 $datacol

您的构造函数调用 load(),它设置 $datacol:

public function load($catid)
{
    ...
    $this->datacol = mysqli_fetch_array($res);
    return true;
}

函数则returnstrue。在构造函数中,这个true赋值给$datacol,覆盖了之前的值:

public function __construct($catid=0)
{
    $this->catid=0;
    $this->datacol=$this->load($catid);         
}

将构造函数更改为如下内容:

public function __construct($catid=0)
{
    if ($catid > 0)
        $this->load($catid);         
}

很简单 $this->datacol = $this->load($catid);不需要

您已两次分配 $this->datacol

 public function __construct($catid=0)
    {
        $this->catid=0;
        $this->load($catid);         
    }
public function load($catid)
{
    global $conn;
    $sql=' select * '
        .' FROM tbl_categories'
        .' WHERE catid='.$catid;
    if (!($res=mysqli_query($conn,$sql)) || !mysqli_num_rows($res)>0) 
        return false;
    $this->datacol = mysqli_fetch_array($res);
    $this->catid = $this->datacol['catid'];
    return true;
}

如有不足请补充