我对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?或者有没有办法缩短它?谢谢!
答案 0 :(得分: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;
}
}
答案 1 :(得分: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;
}
答案 2 :(得分:1)
如果你还不熟悉,这个可以对于一个班级来说是一个很好的情况并且可以练习OOP技术。这可能不适合你的情况,并且可能有更简单的方法,但我想我为了知识而无论如何都会这样展示!
基本上,在创建一个需要$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]);
}
希望在你脑海中植入一些想法! : - )
免责声明:我尚未测试此代码,但可能包含错误。