我是PHP OOP的新手,想知道是否有人可以帮助我。
我有一个基本类,其中一个方法从数据库返回数据。目前我正在调用显示函数内部所有内容的方法。
这是我的班级定义:
class Products{
//properties
public $familyName = "";
public $familyProduct = "";
//Methods
public function getFamily($catId){
global $conn;
$sql = "SELECT * FROM product_family WHERE catID = '$catId'";
$result = $conn->query($sql);
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
echo "<li>".$row['familyName']."</li>";
echo "<li>".$row['familyProduct']."</li>";
}
}
}
}
以下是我调用此方法的方法:
$Products = new Products;
$Products->getFamily( 4 );
但是,如何将来自数据库(ex familyName,familyProduct)的每个数据分配到类实现中的变量中,然后在需要的地方单独访问它们。像这样:
$Products = new Products;
$Products->familyName;
$Products->familyProduct;
我有空属性,但我不知道如何为它们分配来自循环的值,然后各自返回它们。
谢谢,
答案 0 :(得分:1)
我会在您的代码中查看更改内容。
不要让属性公共使用使用Getters和Setters
这将保护您不会以错误的方式使用对象,例如现在你无法从外部更改familyName
:$products->familyName = "some value"
因为这会使对象的数据损坏。
global $conn;
是OOP中不使用Object的构造,
在您的情况下$products = new Products($conn);
现在您可以设置Cat ID $products->setCatId(4);
并阅读结果
$familyName = $products->getFamilyName();
或$familyProduct = $products->getFamilyProduct();
如果您有多个结果,您将获得一个数组,如果catId总是会产生一行,您可以删除此部分。如果您了解有关OOP的更多信息,您会发现可以使用单独的Object完成漏洞SQL内容,但这不是主题。
class Products
{
// Properties
protected $conn;
protected $catId;
protected $familyName;
protected $familyProduct;
public function __construct($conn)
{
$this->conn = $conn;
}
// set Cat ID and get date
public function setCatId($catId)
{
$this->catId = (int) $catId;
$this->getDate();
}
public function getCatId()
{
return $this->catId;
}
// get Family Name
public function getFamilyName()
{
return $this->familyName;
}
// get Family Product
public function getFamilyProduct()
{
return $this->familyProduct;
}
// get date
protected function getDate()
{
$sql = "SELECT * FROM product_family WHERE catID = '$this->catId'";
$result = $this->conn->query($sql);
// Default if no result
$this->familyName = null;
$this->familyProduct = null;
// if one Result
if ($result->num_rows == 1)
{
$row = $result->fetch_assoc();
$this->familyName = $row['familyName'];
$this->familyProduct = $row['familyProduct'];
}
if ($result->num_rows > 1)
{
$this->familyName = [];
$this->familyProduct = [];
while ($row = $result->fetch_assoc())
{
$this->familyName[] = $row['familyName'];
$this->familyProduct[] = $row['familyProduct'];
}
}
}
}