我不是百分百肯定,但这是定义属性的正确方法:
class Product {
public $id;
public $name;
}
class LineItem {
public Product $product; //<------ this property
public $qty;
}
或者,最好将其保留为$product
而没有类型标识符?
答案 0 :(得分:3)
产品应以这种方式定义:
public $product;
并将其创建为:
$product = new Product();
答案 1 :(得分:2)
正如@Jon在评论中已经建议的那样。 PHP实际上并不支持类型标识符。对此最好的方法(或者至少就像我做的那样)。只需定义$product
然后创建构造函数,该构造函数在该类变量中实例化一个新的Product对象。或者只是在需要时使用LineItem类中的getter / setter方法传入对象。
编辑:确实与情况有所不同(你没有给出情况,所以我试着猜测并给出一个例子)。
构造
public function __construct($product = new Product()) {
$this->product = $product;
}
Getter / setter以同样的方式工作:
public function getProduct() {
return $this->product;
}
//In arguments you're able to make sure it is of a class Product if I'm correct.
public function setProduct(Product $product) {
$this->product = $product;
//You might do a return of $this, dependent on your logic of course.
return $this;
}
编辑:为可能从中受益的未来用户添加以下代码。 在常规PHP文件中,您可以执行以下操作:
$product = new Product();
//Set some price, description or something in your product...
//Pass product with constructor.
$lineItem = new LineItem($product);
//Get the product of the lineItem...
$product = $lineItem->getProduct();
//Set a product if constructor hasn't been used...
$lineItem->setProduct($product);
答案 2 :(得分:1)
正如乔恩所说,你不能在PHP中拥有类型标识符。
您可以执行类似的操作并使用instanceof
运算符:
class LineItem {
protected $_product;
//...
public function setProduct($p) {
if($p instanceof Product) {
$this->_product = $p;
} else {
throw new Exception("...");
}
}
}
答案 3 :(得分:1)
您可以在__construct()
上使用Type Hinting:
class Product {
public $id;
public $name;
}
class LineItem {
public function __construct(Product $product) {
$this->product = $product;
}
public $qty;
}
答案 4 :(得分:0)
您可以在构造函数中设置它
class Product {
public $id;
public $name;
}
class LineItem {
public $product;
public $qty;
function __construct(){
$this->product = new Product();
}
}