2013-03-12 70 views
0

所以,如果我建立一个类...铸造瓦尔在函数调用

class Foo { 
    public $_string; 
    public function($sString = 'new string') { 
     $this->_string = $sString; 
    } 
} 

我想强行说$ sString字符串类型的在我的函数参数,这样的事情...

class Foo { 
    public $_string; 
    public function(string $sString = 'new string') { 
     $this->_string = $sString; 
    } 
} 

但我的IDE说“Undefined class'String'”和PHP会抛出错误,所以有没有办法强制说什么类型的变量正在传入一个类的函数或我必须声明它在这样的功能里面...

class Foo { 
    public $_string; 
    public function($sString = 'new string') { 
     $this->_string = (string)$sString; 
    } 
} 

任何帮助,将不胜感激。谢谢。

回答

1

什么你所描述的是“类型提示”和PHP支持它,但是,(由于某种原因),它不允许它的任何内置固有类型或stringhttp://php.net/manual/en/language.oop5.typehinting.php),说明您的问题”重新拥有。

你可以通过在你的函数内部手动调用is_string来解决这个问题,但是如果你控制你的上游调用者,这样的事情是不必要的。

+0

我知道如何使用is_string()和is_array或is_xxx ...来检查变量的类型,我只是希望我可以强制说出什么类型的var进入函数。即使对我来说也没有,但对于一个大型项目,我们有多个开发人员在相同的代码库上工作,如果有这种强制检查会告诉其他开发人员他们是否错误地使用它,那将是非常好的。不过谢谢你的帮忙,希望php能够加强,让我们更好地控制我们的变数。 – Rob 2013-03-12 03:44:22

2

不是今天。 PHP 5.4可能有一个scalar类型提示,但是这个提议后来被提出。

你所能做的只是在正文中检查is_string()。

+0

5.4不会得到标量类型暗示。 5.5也可能不会,但是谁知道内部人员可以做出一个很好的补丁并且说服rasmus。人们可以希望他不能? – PeeHaa 2013-03-12 09:33:31

0

您可以使用is_string函数来检查它。

if (is_bool($message)) { 
    $result = 'It is a boolean'; 
} 
if (is_int($message)) { 
    $result = 'It is a integer'; 
} 
if (is_float($message)) { 
    $result = 'It is a float'; 
} 
if (is_string($message)) { 
    $result = 'It is a string'; 
} 
if (is_array($message)) { 
    $result = 'It is an array'; 
} 
if (is_object($message)) { 
    $result = 'It is an object'; 
} 

检查此。

class Foo { 
    public $_string; 
    public function($sString = 'new string') { 
     if (is_string($sString)) { 
      $this->_string = $sString; 
     } 
    } 
}