2016-01-22 52 views
0

我有一个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; 
    } 
} 
+0

难道这就是我在做本身cond代码块? – kingcobra1986

+0

变量类型是基于变量用法在运行时定义的PHP,因此不能单独定义。 –

回答

2

是,在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

相关问题