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

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

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

4

3 回答 3

2

今天不行。PHP 5.4 可能有一个scalar类型提示,但是这已经被提议随后被丢弃。

您所能做的就是在正文中进行 is_string() 检查。

于 2013-03-12T03:33:57.453 回答
1

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

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

于 2013-03-12T03:34:28.593 回答
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;
        }
    }
}
于 2013-03-12T03:35:46.387 回答