这是我的代码:
function phpwtf(string $s) {
echo "$s\n";
}
phpwtf("Type hinting is da bomb");
这将导致以下错误:
可捕捉的致命错误:传递给phpwtf()的参数1必须是string的实例,string给定
看到PHP同时识别和拒绝所需的类型,这有点像奥威尔。有五盏灯,该死。
PHP中字符串类型提示的等效内容是什么?额外的考虑,答案解释了这里到底发生了什么。
这是我的代码:
function phpwtf(string $s) {
echo "$s\n";
}
phpwtf("Type hinting is da bomb");
这将导致以下错误:
可捕捉的致命错误:传递给phpwtf()的参数1必须是string的实例,string给定
看到PHP同时识别和拒绝所需的类型,这有点像奥威尔。有五盏灯,该死。
PHP中字符串类型提示的等效内容是什么?额外的考虑,答案解释了这里到底发生了什么。
当前回答
我认为php上的类型转换在块内部,php上的字符串不是对象,正如我所知:
<?php
function phpwtf($s) {
$s = (string) $s;
echo "$s\n";
}
phpwtf("Type hinting is da bomb");
其他回答
由于PHP 7.0的类型声明允许标量类型,所以现在可以使用这些类型:self, array, callable, bool, float, int, string。前三个是在PHP 5中提供的,但后四个是在PHP 7中新增的。如果你使用任何其他的(例如整数或布尔),将被解释为类名。
有关更多信息,请参阅PHP手册。
也许不安全也不漂亮,但如果你一定要:
class string
{
private $Text;
public function __construct($value)
{
$this->Text = $value;
}
public function __toString()
{
return $this->Text;
}
}
function Test123(string $s)
{
echo $s;
}
Test123(new string("Testing"));
PHP允许在提供类来指定对象时使用“提示”。根据PHP手册,“类型提示只能是对象和数组类型(从PHP 5.1开始)。不支持int和string的传统类型提示。”错误是令人困惑的,因为你选择了“字符串”-把“myClass”放在它的位置,错误将读不同:“传递给phpwtf()的参数1必须是myClass的一个实例,字符串给定”
当从Laravel控制器调用函数到PHP文件时,我得到了这个错误。
几个小时后,我发现了问题:我在一个静态函数中使用了$this。
我认为php上的类型转换在块内部,php上的字符串不是对象,正如我所知:
<?php
function phpwtf($s) {
$s = (string) $s;
echo "$s\n";
}
phpwtf("Type hinting is da bomb");