Php 函数参数的数字与字符串文字
我认为以前没有人问过这个问题(如果有,至少我找不到…) 最近我开始从事一个比我通常使用的更大的项目(至少更多的OOP(…我指的是函数、类和对象));然而,函数参数的变量类型应该是什么让我抓狂,例如:Php 函数参数的数字与字符串文字,php,function,computer-science,arguments,Php,Function,Computer Science,Arguments,我认为以前没有人问过这个问题(如果有,至少我找不到…) 最近我开始从事一个比我通常使用的更大的项目(至少更多的OOP(…我指的是函数、类和对象));然而,函数参数的变量类型应该是什么让我抓狂,例如: <?php function uberFunc($myArgument){ switch($myArgument){ //Stuff } } ?> 在这个例子中,$myArgument只能是一定数量的响应(即它不是用户创建的)。例如,$myArgu
<?php
function uberFunc($myArgument){
switch($myArgument){
//Stuff
}
}
?>
在这个例子中,$myArgument
只能是一定数量的响应(即它不是用户创建的)。例如,$myArgument
可以定义sql的排序方式,或者使用哪个散列,或者定义一些预定义的值列表。然后case语句将$myArgument
转换为某个操作(追加mysql字符串或以某种方式散列字符串)
tl;dr:函数的参数只能是一组预定义值中的一个
我的问题是:对于这些类型的变量,使用字符串文字(将由switch-case语句解码)或数字(也将由switch-case语句解码)更好吗?
目前,我一直在使用触发器,这将开始创建笨拙的代码,所以我想选择一个(字符串文字或数字),并坚持使用它
使用字符串文字的优点(据我所知):
- 可读性
- 直接插入(即,如果您传递一个决定如何组织sql的变量,您可以执行类似于“$myArgument
- 可以通过数学操作(如果您需要这样一段代码)
- 我认为它们的处理速度稍微快一些(但还不足以产生影响)
- 当然,这取决于您的函数将要执行的操作
如果您有一个将两个数字相加的函数,那么将字符串作为参数传递几乎没有意义
您的函数可能需要作用于一个对象,在这种情况下,您需要将该对象作为参数传递
当然,总会有函数需要接受字符串
我想说的是,你不能确定你的项目中的每个函数都只接受字符串作为参数
我经常把数组传递给函数,所以你的策略肯定不适合我
如果我完全没有理解你的问题,我深表歉意。事实上,我认为唯一正确的是“可读性” 关于变量是否可以“直接插入”到sql数据库中(如果有)
“按“$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
}
($i=0;$i<1000000;$i++)的{
$var=“3”+“4”;//需要0.207326889038秒
}
对于($i=0;$i<1000000;$i++){
$var=3+4;//需要0.10358481秒
}
当然,它的长度是原来的两倍,但是100万次迭代的0.1秒差算不了什么。如果你能做第二次迭代,那么基本上做第一次是愚蠢的,但是如果它增加了可读性,正如你所知道的,它在速度上不会有太大的差别。如果你有简单的独立函数,字符串参数可能是b你将很难记住任何神奇的数字 不过,最好的选择是常量。为每个可能的函数参数定义全局常量可能会很麻烦,但对于类来说,它们是不需要动脑筋的:
class Foo {
const BAR = 1;
public function baz($arg) {
switch ($arg) {
case self::BAR :
...
}
}
}
$foo = new Foo;
$foo->baz(Foo::BAR);