我认为之前没有问过这个问题(至少我找不到它......)
最近我开始研究一个比我通常使用的更大的项目(至少更多的OOP(我的意思是函数,类和对象));但是,我的函数参数应该是什么变量类型让我发疯,例如:
<?php
function uberFunc($myArgument){
switch($myArgument){
//Stuff
}
}
?>
并且假设,在此示例中,$myArgument
只能是一定数量的响应(即,它不是用户创建的)。例如,$myArgument
可能会定义sql的排序方式或要使用的哈希值,或某些预定义的值列表。然后case语句将$myArgument
转换为某个动作(附加mysql字符串或以某种方式散列字符串)。
tl; dr:为函数设置参数,该参数只能是一组预定义值之一。
我的问题是:对于这些类型的变量,最好使用字符串文字(将由switch-case语句解码)或数字(也可以通过switch-case语句解码)吗
目前我一直在翻转,开始创建笨拙的代码,所以我想选择一个(字符串文字或数字)并坚持下去
使用字符串文字:
的优点(我知道)"SELECT * FROM main ORDER BY ".$myArgument
使用数字:
的优点(我知道)答案 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);