【问题标题】:Passing safe parameters to function or letting function check it?将安全参数传递给函数还是让函数检查它?
【发布时间】:2012-01-28 03:47:57
【问题描述】:

请考虑下面的代码

<?php
$a = '';

echo empty($a) ? '' : substr($a, 0, 1); // Prints: ''
echo substr($a, 0, 1); // Prints: ''

哪个“回声”更好?在第一个中总是会检查 $a 并且 substr 会正常运行,而在第二个中,substr 在内部检查 $a 并可能会触发一些通知错误。

【问题讨论】:

    标签: php function error-handling argument-passing


    【解决方案1】:

    第一个更好。

    您始终需要防止错误/警告/通知。

    虽然我什至不会为了可读性而使用单行。

    【讨论】:

      【解决方案2】:

      输入字符串必须是一个字符或更长。所以最好先检查一下。 请查看:http://php.net/manual/en/function.substr.php

      【讨论】:

        【解决方案3】:

        最重要的部分是输入和输出变量之间的区别:

        $input['a'] = '';
        
        $output['a'] = empty($input['a']) ? '' : substr($input['a'], 0, 1);
        
        echo $output['a'];
        

        如何编写验证是您的事,它应该处理所有边缘情况,并且不应触发任何错误/警告。

        编辑:如果您担心减少函数调用的次数,以下 sn-p 不使用任何函数,仅使用一种语言构造:

        $a = empty($a[0])?'':$a[0];
        echo $a;
        

        【讨论】:

        • 你真的应该考虑将注意力转移到首先防止错误和下一个性能。
        • PeeHaa cmets +1,性能是相对的,但安全性不是。安全性包括您的代码将安全地执行(无论传递给它的输入值如何,您的脚本运行的安全性)。如果不这样做,性能就毫无用处,因为它根本不会执行。
        • 谢谢你们。我真的理解你的话,但我的目的是内部和外部检查,而不是留下警报。您会认为一个不会发出任何警报而不是 substr 的函数...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2019-06-01
        • 2017-05-19
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 2016-01-19
        相关资源
        最近更新 更多