PHP字符串到整数的异常

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.

解析通过简单地转换$SSint然后返回字符串并将其与初始值进行比较来工作.


小智 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)


Mac*_*ity 6

一般来说,没有.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