Cra*_*row 0 php type-conversion
我对HackersRank上的一个问题有疑问 - 第16天:例外 - 字符串到整数 .总之是任务
读取字符串SS,并打印其整数值; 如果SS无法转换为整数,则打印Bad StringBad String.
注意:您必须使用提交语言中内置的String-to-Integer和异常处理结构.如果您尝试使用循环/条件语句,您将获得00分.
任务本身很简单,我在Python上解决了它.我的问题是我没有看到用PHP做到这一点的方法 - 如果你试图将字符串转换为整数,PHP中是否有抛出异常的函数?
Raz*_*van 12
这是使用try {..} catch机制的另一个hacky解决方案:
try {
new ReflectionClass('ReflectionClass' . ((int)$SS . "" !== $SS));
echo $SS;
} catch (Exception $e) {
echo "Bad StringBad String";
}
Run Code Online (Sandbox Code Playgroud)
它的工作方式如下:如果字符串$SS
实际上没有解析为整数,代码将尝试查找ReflectionClass1类,最终将抛出一个ReflectionException
.
解析通过简单地转换$SS
为int
然后返回字符串并将其与初始值进行比较来工作.
小智 9
仅适用于 php 7(HackersRank 使用它):
class Printer {
public static function printInt(int $value) {
echo $value;
}
}
$handle = fopen ("php://stdin","r");
fscanf($handle,"%s",$S);
try {
sscanf($S, "%d", $out);
Printer::printInt($out);
} catch (TypeError $e) {
echo "Bad String";
}
Run Code Online (Sandbox Code Playgroud)
一般来说,没有.PHP是弱类型的,因此您可以将整数更改为字符串,反之亦然,无需任何特殊工作.(强调我的)
PHP是一种动态的,松散类型的语言,它使用写时复制和引用计数.
为了澄清上述陈述的确切含义:PHP是一种高级语言,弱类型隐含了引擎首选项转换,或者将变量强制转换为执行类型所需的类型.
这里唯一的例外是在PHP 7.0中引入了严格的类型提示.因此,尝试将它们与严格类型提示交替使用将会引发错误
<?php
declare(strict_types=1);
$var = 1; //integer
function foo(string $data) :string {
echo $data;
}
foo($var);
Run Code Online (Sandbox Code Playgroud)
制作(演示)
致命错误:未捕获的TypeError:传递给foo()的参数1必须是字符串类型,给定整数,在第8行的/ in/Be68h中调用并在/ in/Be68h中定义:5