PHP:如何缩短代码?

时间:2013-06-07 06:11:13

标签: php

我知道如何为我的问题编写解决方案,我只对编码它的最短路径感兴趣。那就是问题所在:

我正在解析一个URL,解析可以有3个结果,本地,分段或生产。我弄清楚它正在使用正则表达式。我在一个名为getServer()的函数中这样做。

现在在该函数中,我返回一个数组,该数组有3个元素,它们是0或1.如果第一个是1而另外两个是0,则意味着它是一个本地服务器。

现在当我拿回那个数组时,我仍然要编写一个if来查看哪个数组元素是1。

if($returnArrayFromFunction[0] == '1') {
    // do the stuff for the local server case
} 

if($returnArrayFromFunction[1] == '1') {
    // do the stuff for the staging server case
}

if($returnArrayFromFunction[2] == '1') {
    // do the stuff for the production server case
} 

有没有办法缩短代码?

谢谢你的时间!

6 个答案:

答案 0 :(得分:3)

为什么不在getServer()中返回一个ID号?

$serverId = getServer();

switch ($serverId) {
  case 0:  // Local
    // Code
    break;
  case 1:  // Staging
    // Code
    break;
  case 2:  // Production
    // Code
}

注意:

如果您需要在代码中的其他位置使用这些服务器ID,则可以通过使用define()的命名约定来更容易地跟踪哪个ID对应于哪个服务器。这也可以使您的代码更易于阅读,从而更容易调试。

define('SERVER_LOCAL', 0);
define('SERVER_STAGING', 1);
define('SERVER_PRODUCTION', 2);

然后您可以使用以下内容替换上述开关:

switch ($serverId) {
  case SERVER_LOCAL:
    // Code
    break;
  case SERVER_STAGING:
    // Code
    break;
  case SERVER_PRODUCTION:
    // Code
}

答案 1 :(得分:3)

不要返回编码结果的索引值为1的数组。定义三个常量

define('SERVER_LOCAL', 1);
define('SERVER_STAGING', 2);
define('SERVER_PRODUCTION', 4);

从代码中返回正确的常量,然后使用switch语句

switch($serverType) {
    case(SERVER_LOCAL)::
       DoStuffForLocalServer();
       break;
    case ...

如果简洁是您的目标,请将开关缩短为

 $serverType == SERVER_LOCAL ? doLocal() : $serverType == SERVER_STAGING ? doStaging() : doProduction();

尽可能短,但是会不受欢迎: - )

答案 2 :(得分:1)

试试此代码

  $case=array_search(1,$returnArrayFromFunction);
   switch($case)
   {
     0:
     break;
     // do the stuff for the local server case
     1:
     break;
     // do the stuff for the staging server case
     2:
     // do the stuff for the production server case
     break;

   }

答案 3 :(得分:0)

尝试

foreach($returnArrayFromFunction as $key=>$return)
{
   if($return == '1')
   {
       switch($key)
       {
           case '0' : //Stuff at local
                      break;
           case '1' : //Stuff at Staging
                      break;
           case '2' : //Stuff at production
                      break;
       }
   }
}

答案 4 :(得分:0)

$code = join('', $returnArrayFromFunction );
//something like '111' / '010' / '110'

switch( $code ){
  case '111':
     //all values 1
     break;
  case '001':
     //something else
     break;
}  

答案 5 :(得分:0)

您的getServer()函数应该只返回一个值而不是数组。然后使用以下代码:

$serverId = getServer();

switch ($serverId) {
  case 0:  // local server
    // Your code
    break;
  case 1:  // testing server
    // Your code
    break;
  case 2:  // live server
    // Your code
}