在函数调用中转换变量

时间:2013-03-12 03:31:33

标签: php scalar type-hinting

所以,如果我建立一个班级......

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说“未定义的类'String'”并且php会抛出错误,所以有没有办法强制说出什么类型的变量被传递到类中的函数或者我必须在其中声明它像这样的功能...

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

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

3 个答案:

答案 0 :(得分:2)

不是今天。 PHP 5.4可能有一个scalar类型提示,但之前已经提出了这个提示。

你所能做的就是在身体中进行is_string()检查。

答案 1 :(得分:1)

你所描述的是“类型提示”并且PHP支持它,但是(出于某种原因)它不允许任何内置的内在类型或stringhttp://php.net/manual/en/language.oop5.typehinting.php这解释了你遇到的问题。

您可以通过在函数内手动调用is_string来解决此问题,但如果您控制上游调用者,则无需执行此类操作。

答案 2 :(得分: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;
        }
    }
}