0

我想知道这种语法是否正确:

在 Classes.php 上:

Class Cart {

   public $Product; // an object handler will be set on this property

   public function __construct($user) {
   // get a product on user's cart (let's say it's only 1 product) - returns $id
   $this->Product = new Product($id);
   }
}


Class Product {

   public function __construct($id) {
   // construct goes here
   }

   public function Product_Method() {
   // product method goes here
   }

}

在脚本上

$cart = new Cart($user);
$product_method = $cart->Product->Product_method();

它看起来不错,因为 $product 设置为 Public 并引用对象处理程序。

4

3 回答 3

0

在这里你可以用“正确”来表示各种各样的事情。

  1. 句法

    你的语法是正确的。您可以通过运行代码很容易地发现这一点,所以我不确定这是否是您要问的。

  2. 正确性

    正如其他人所说,$id不存在于构造函数的范围内。这将导致运行时错误。

  3. 最佳实践

    如今,依赖注入风靡一时。new不鼓励从构造函数调用。相反,你会传入你的Product对象。请注意,这有点主观,如果这听起来不必要地复杂,没有什么强迫你这样做,但至少要知道为什么人们反对它,这样你才能做出明智的决定。

    此外,根据您的用例,封装功能可能会更好,这样外部代码就不必知道Product's 的方法(它只需要处理购物车)。也就是说,$Product将其设为私有并添加一个方法来Cart负责调用Product_method(). 这可能有意义,也可能没有意义,具体取决于 Product_method()(是否Cart应该知道该怎么做?)的语义。

于 2013-04-25T18:11:14.530 回答
0

您通过将 $id 传递给构造函数来使用它new Product($id),但是您从哪里获得 $id 呢?而且您只有一个字符串浮动在函数中,没有回声或分配给变量。

于 2013-04-25T17:47:14.960 回答
0

$id 是什么?你需要在构造中设置 $id

Class Cart {

   public $Product;

   public function __construct($user,$id) {
   "get a product on user's cart (let's say it's only 1 product)"
   $this->Product = new Product($id);
   }
}

在你的代码中

$cart = new Cart($user,$id);
$product_method = $cart->Product->Product_method();
于 2013-04-25T17:52:23.897 回答