0

我对php很陌生,所以我想知道最有效的方法是什么。例如,我有 3 辆汽车的 3 种不同颜色作为变量。因此,汽车 1 获得颜色 1,汽车 2 获得颜色 2,汽车 3 获得颜色 3。如果汽车已经没有颜色,则只会获得颜色。最有效的方法是什么?

像这样的东西?

    if (is_car('1') AND !hascolor) {
        give_color_1 }
    else {
        echo 'Car already has a color'
    }

然后这个布尔值也适用于 2 和 3?或者有没有办法让它更短?谢谢!

4

3 回答 3

1

尝试switch声明:

if(!$hascolor) {
    switch(true) {
        case (is_car('1')): set_color($color_1); break;
        case (is_car('2')): set_color($color_2); break;
        case (is_car('3')): set_color($color_3); break;
        default: set_color($color_default); break;
    }
}
于 2013-07-24T19:41:19.613 回答
1

一种方法是使用数组。所以对于你的例子:

// initialize the array
$car_color_array = Array('1' => '', '2' => '', '3' => '');
$color_array = Array('1' => 'color1', '2' => 'color2', '3' => 'color3');

foreach ($car_color_array  as $car => $color){
    // if color is not set
    if ($color == ''){
        $car_color_array[$car] = $color_array[$car];
    }
}

// this should give cars with colors now
foreach ($car_color_array  as $car => $color){
    echo "<BR>Car: " . $car . " -> Color: " . $color;
}
于 2013-07-24T19:41:26.103 回答
1

如果您还不熟悉,这对于上课和练习 OOP 技术来说可能是一个很好的情况。这可能不适合您的情况,并且可能有更简单的方法,但我想我无论如何都会为了知识而展示这种方式!

基本上,定义一个在创建时需要 a 的类$carNumber(带有$color要传递的可选变量)。然后,创建一种方法来更改该颜色。如果已经有颜色,则不要更改它,否则,您会更改。

class Car{
  public $hasColor = 0;
  public $carNumber = 0;
  public $color = null;

  public function __construct($carNumber, $color = null){
     $this->carNumber = $carNumber;
     if(is_null($color)){

     }else{
        $this->color = $color;
     }
  }

  public function alterColor($colorType){
    if($this->hasColor === 1){
    }else{
      $this->color = $colorType;
      $this->hasColor = 1;
    }
  }
}

现在要实现类...

include_once("Car.php");

$car1 = new Car(1);
$car2 = new Car(2);
$car3 = new Car(3, "Green");

$car1->alterColor("Red");
$car2->alterColor("Blue");
$car3->alterColor("Brown");

所以$car3的颜色不应该改变,因为它已经是绿色了!

如果您想进行快速迭代,只需执行类似...

$cars = array($car1, $car2, $car3);
foreach($cars as $car){
   $car->alterColor("Blue");
}

这会将每辆车的颜色更改为“蓝色”。如果你想让每辆车都有不同的颜色,你可能会做类似的事情(试图验证现在alterColor会被调用,但我想它会)......

$cars = array($car1, $car2, $car3);
$colors = array("Blue", "Red", "Green");
for($i=0; $i<count($cars); $i++){
   $cars[$i]->alterColor($colors[$i]);
}

希望这会在您的脑海中植入一些想法!:-)

免责声明:我尚未测试此代码,它可能包含错误。

于 2013-07-24T19:51:50.810 回答