在一个PHP类中,我该如何使变量成为特定类型?
问题描述:
我有一个PHP类,我想它有它,所以变量只是一个布尔值?在一个PHP类中,我该如何使变量成为特定类型?
class TestClass {
private $isTrue;
public function __construct ($isTrue) {
$this -> isTrue = $isTrue;
}
public function getIsTrue ($isTrue) {
return $this -> isTrue;
}
public function setIsTrue ($isTrue) {
$this -> isTrue = $isTrue;
}
}
或者是我需要在setter和构造函数中这样做吗?
class TestClass {
private $isTrue;
public function __construct ($isTrue) {
$this -> isTrue = (bool)$isTrue;
}
public function getIsTrue ($isTrue) {
return $this -> isTrue;
}
public function setIsTrue ($isTrue) {
$this -> isTrue = (bool)$isTrue;
}
}
答
是,在PHP < 7,你必须手动做到这一点,因为你做了。
然而,在PHP 7,可以使用标typehinting来达到相同的目的:
<?php
class TestClass {
private $isTrue;
public function __construct(bool $isTrue) {
$this->isTrue = $isTrue;
}
public function getIsTrue() {
return $this->isTrue;
}
public function setIsTrue(bool $isTrue) {
$this->isTrue = $isTrue;
}
}
$tc = new TestClass(true);
var_dump($tc->getIsTrue()); //true
$tc->setIsTrue(false);
var_dump($tc->getIsTrue()); //false
$tc->setIsTrue(1);
var_dump($tc->getIsTrue()); //true
您也可以启用严格的类型模式,最后一种情况下会引发错误:
<?php
declare(strict_types=1);
// ...same code here ...
$tc->setIsTrue(1);
var_dump($tc->getIsTrue());
会产生:
Fatal error: Uncaught TypeError: Argument 1 passed to TestClass::setIsTrue() must be of the type boolean, integer given, called in /.../sth.php on line 27 and defined in /.../sth.php:16
难道这就是我在做本身cond代码块? – kingcobra1986
变量类型是基于变量用法在运行时定义的PHP,因此不能单独定义。 –