数字与函数参数的字符串文字

时间:2011-07-16 02:44:57

标签: php function computer-science arguments

我认为之前没有问过这个问题(至少我找不到它......)

最近我开始研究一个比我通常使用的更大的项目(至少更多的OOP(我的意思是函数,类和对象));但是,我的函数参数应该是什么变量类型让我发疯,例如:

<?php
function uberFunc($myArgument){
    switch($myArgument){
         //Stuff
    }
}
?>

并且假设,在此示例中,$myArgument只能是一定数量的响应(即,它不是用户创建的)。例如,$myArgument可能会定义sql的排序方式或要使用的哈希值,或某些预定义的值列表。然后case语句将$myArgument转换为某个动作(附加mysql字符串或以某种方式散列字符串)。

tl; dr:为函数设置参数,该参数只能是一组预定义值之一。

我的问题是:对于这些类型的变量,最好使用字符串文字(将由switch-case语句解码)或数字(也可以通过switch-case语句解码)吗

目前我一直在翻转,开始创建笨拙的代码,所以我想选择一个(字符串文字或数字)并坚持下去

使用字符串文字

的优点(我知道)
  • 可读性
  • 直接插入(即,如果传递一个确定如何组织sql的变量,则可以执行"SELECT * FROM main ORDER BY ".$myArgument
  • 之类的操作

使用数字

的优点(我知道)
  • 可以通过数学操作(如果你需要这样的代码)
  • 我认为他们的处理速度略快(但不足以产生差异)

3 个答案:

答案 0 :(得分:0)

当然这取决于你的功能将会做什么。

如果你有一个将两个数字加在一起的函数,那么将字符串作为参数传递几乎没有意义。

您的函数可能需要对某个对象执行操作,在这种情况下,您可以将该对象作为参数传递。

当然总有一些函数需要接受字符串。

我想说的是,您无法确定项目中的每个函数都只接受字符串作为参数。

我将数组传递给函数很多,所以你的策略肯定对我不起作用。

道歉,如果我完全错过了解你的问题。

答案 1 :(得分:0)

实际上,我实际看到的唯一可能是正确的是“可读性”。

关于变量是否可以“直接插入”sql数据库中,如果有的话     "SELECT * FROM main ORDER BY ".$myArgument 无论$ myArgument是字符串还是整数,这都将起作用。但是,您应该使用预准备语句(例如,使用PDO),这将阻止SQL注入以及其他优点。

可以用数学来操纵吗?

echo "3" + "4"; // Outputs 7

PHP会在进行数学运算时将引用的字符串转换为数字值。

正如另一个人所说,速度的差异非常小。

for ($i = 0; $i < 1000000; $i++) {
    $var = "3" + "4"; // takes 0.207326889038 seconds
}

for ($i = 0; $i < 1000000; $i++) {
    $var = 3 + 4; // takes 0.103585958481 seconds
}

当然,这是两倍的长度,但100万次迭代的0.1秒差异并不算什么。基本上做第一个是愚蠢的,如果你可以做第二个,但是如果它增加可读性,正如你所知,它真的不会在速度上产生很大的差异。

答案 2 :(得分:0)

如果你有简单的独立函数,字符串参数可能是最好的。你将很难记住任何神奇的数字。

最好的选择是常数。为每个可能的函数参数定义全局常量会很麻烦,但对于类来说它们是明白的:

class Foo {

    const BAR = 1;

    public function baz($arg) {
        switch ($arg) {
            case self::BAR :
            ...
        }
    }

}

$foo = new Foo;
$foo->baz(Foo::BAR);