OOP - 类和子类 - 调用子类方法

时间:2013-04-25 17:44:05

标签: php class

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

On 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
   }

}

On Script

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

它对我来说没问题,因为$ product设置为Public并且引用了一个对象处理程序。

3 个答案:

答案 0 :(得分:0)

您在构造函数中使用$ id将其传递给new Product($id),但是您从哪里获取$ id?你只需要在函数中浮动一个没有回声或分配给变量的字符串。

答案 1 :(得分:0)

什么是$ id?你需要在construct

中设置$ 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();

答案 2 :(得分:0)

你可以指出各种各样的事情"纠正"这里。

  1. <强>语法

    您的语法是正确的。您可以通过运行代码轻松发现这一点,因此我不确定这是否是您所询问的内容。

  2. <强>正确性

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

  3. 最佳做法

    这些天来,{p> Dependency injection风靡一时。不建议从构造函数中调用new。相反,您可以传入Product对象。请注意,这有点主观,如果听起来没那么复杂,那么强制你没有做到这一点,但至少要知道为什么人们会反对它,以便你做出明智的决定。

    此外,根据您的使用情况,最好封装功能,以便外部代码不必了解Product的方法(它只需要处理一辆车)。也就是说,将$Product设为私有,并向Cart添加一个负责调用Product_method()的方法。根据{{​​1}}的语义(Product_method()应该知道该怎么做?),这可能有意义也可能没有意义。)