未从 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 或 true
或 false
。这个布尔值在这里被分配给 $this->datacol
:
$this->datacol = $this->load($catid);
由于此作业发生 在您完成 $this->datacol = mysqli_fetch_array($res);
之后 ,您的 $this->datacol
变为 true 或 false,不包含来自 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;
}
如有不足请补充
这实际上是我的第一个问题。我正在学习 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 或 true
或 false
。这个布尔值在这里被分配给 $this->datacol
:
$this->datacol = $this->load($catid);
由于此作业发生 在您完成 $this->datacol = mysqli_fetch_array($res);
之后 ,您的 $this->datacol
变为 true 或 false,不包含来自 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;
}
如有不足请补充