在PHP OOP中访问类属性

时间:2017-10-25 21:39:30

标签: php oop

我是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;

我有空属性,但我不知道如何为它们分配来自循环的值,然后各自返回它们。

谢谢,

1 个答案:

答案 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'];
            }
        }
    }
}