Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类声明_Php - Fatal编程技术网

PHP类声明

PHP类声明,php,Php,在php中有没有办法将显式类型设置为object字段?像这样的 class House{ private Roof $roof } 不,没有。PHP变量始终可以是任何类型。但您可以在setter中强制执行一个类型: public function setRoof(Roof $roof) { $this->roof = $roof; } 为什么不将$roof分配给一个新的roof()?您正在寻找PHP的类型提示。它对函数/方法调用非常有效。这是手册: 不能使用PHP代码

在php中有没有办法将显式类型设置为object字段?像这样的

class House{
       private Roof $roof
}

不,没有。PHP变量始终可以是任何类型。但您可以在setter中强制执行一个类型:

public function setRoof(Roof $roof) {
  $this->roof = $roof;
}

为什么不将$roof分配给一个新的roof()?

您正在寻找PHP的类型提示。它对函数/方法调用非常有效。这是手册:


不能使用PHP代码声明对象字段的类型

但您可以在注释中添加类型提示:

class House{
       /**
        * @var Roof
        */
       private $roof
}

这仍然不会使代码强制执行类型,但是一些IDE工具了解docblocks,如果您在不符合类型提示的情况下使用此变量,可能会发出警告。

在使用成员之前,您还可以使用以下命令

if (!$this->roof instanceof Roof) {

    throw new Exception('$this->roof is not an instance of Roof');
}

请注意,您只能强制执行对象或数组,但不能强制执行“基本”类型,如float或string。如果您有一个需要基本类型的setter,例如
bool
,您可以始终
assert('is_bool($value)')