Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数参数的数字与字符串文字_Php_Function_Computer Science_Arguments - Fatal编程技术网

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

Php 函数参数的数字与字符串文字,php,function,computer-science,arguments,Php,Function,Computer Science,Arguments,我认为以前没有人问过这个问题(如果有,至少我找不到…) 最近我开始从事一个比我通常使用的更大的项目(至少更多的OOP(…我指的是函数、类和对象));然而,函数参数的变量类型应该是什么让我抓狂,例如: <?php function uberFunc($myArgument){ switch($myArgument){ //Stuff } } ?> 在这个例子中,$myArgument只能是一定数量的响应(即它不是用户创建的)。例如,$myArgu

我认为以前没有人问过这个问题(如果有,至少我找不到…)

最近我开始从事一个比我通常使用的更大的项目(至少更多的OOP(…我指的是函数、类和对象));然而,函数参数的变量类型应该是什么让我抓狂,例如:

<?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);