我想知道这种语法是否正确:
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并且引用了一个对象处理程序。
答案 0 :(得分:0)
您在构造函数中使用$ id将其传递给new Product($id)
,但是您从哪里获取$ id?你只需要在函数中浮动一个没有回声或分配给变量的字符串。
答案 1 :(得分:0)
什么是$ id?你需要在construct
中设置$ idClass 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)
你可以指出各种各样的事情"纠正"这里。
<强>语法强>
您的语法是正确的。您可以通过运行代码轻松发现这一点,因此我不确定这是否是您所询问的内容。
<强>正确性强>
正如其他人所说,$id
并不存在于构造函数的范围内。这将导致运行时错误。
最佳做法
这些天来,{p> Dependency injection风靡一时。不建议从构造函数中调用new
。相反,您可以传入Product
对象。请注意,这有点主观,如果听起来没那么复杂,那么强制你没有做到这一点,但至少要知道为什么人们会反对它,以便你做出明智的决定。
此外,根据您的使用情况,最好封装功能,以便外部代码不必了解Product
的方法(它只需要处理一辆车)。也就是说,将$Product
设为私有,并向Cart
添加一个负责调用Product_method()
的方法。根据{{1}}的语义(Product_method()
应该知道该怎么做?),这可能有意义也可能没有意义。)