【问题标题】:How to specify type in PHP?如何在 PHP 中指定类型?
【发布时间】:2019-07-28 12:05:47
【问题描述】:

有两个类:

class Product {
  public id;
  public name;
} 

class OrderCustomer
{

    public $DeliveryDate;
    public $PhotoBefore = 0;
    public Product[] products;

}

所以,我尝试将OrderCustomer 类中的属性products 指定为Product 类型。它应该是一系列产品。 如何在 php 中做到这一点?

【问题讨论】:

  • 如何在更少的版本中做到这一点?
  • 使用constructorarray 分配给另一个类变量
  • PHP 是一种弱类型语言,就像大多数脚本语言一样。因此,您将属性声明为产品数组,而是将产品数组分配作为值。
  • 我知道,但我想确保 $products 包含具体结构(属性),以使用 IDE 提示
  • 要获得 IDE 提示,您可以提供 PHPdoc 注释:/** @var Product[] */,但代码不会强制执行。

标签: php class object


【解决方案1】:

正如 cmets 中所提到的,PHP 不是一种强类型语言,您所寻找的内容是不可能的,至少与 C# 和 Java 等语言不同。您可以通过强制添加到 $products 类成员的内容来接近该功能,方法是将向其添加值限制为仅接受类型为 Product 的变量的 setter 类方法。

要获得类型提示,您需要使用 Doc Prop 明确说明该变量旨在保存和排列产品。

class Product {
    public $id;
    public $name;
}

class OrderCustomer
{

    public $DeliveryDate;
    public $PhotoBefore = 0;

    /** @var Product[] */
    public $products = [];

    public function addToProductArray(Product $product) 
    {
        $this->products[] = $product;
    }

}

因为$products 现在是protected,如果您打算以这种方式访问​​它,请确保您还创建了一个 getter 以从类外部(即通过调用代码)获取其值。

【讨论】:

  • 同上。真是疯了,我们下了多少雨。过去几周已经好些了……终于……
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
相关资源
最近更新 更多