PHP数组仅返回值

时间:2017-09-28 15:28:10

标签: php arrays oop

我开始研究PHP面向对象编程 我对PHP的经验有限。

我有如下PHP代码:

A"汽车"类:

class Cars {
    static $car_specs = array("wheel_count", "name", "color");
    static function set_car_detail() {
        self::$car_specs["wheel_count"] = 4;
        self::$car_specs["name"] = "default";
        self::$car_specs["color"] = "generic";
    }
    static function get_car_detail() {
        return self::$car_specs;
    }
}

然后我想输出这个:

Cars::set_car_detail();
echo implode(',', Cars::get_car_detail());
回声是:

wheel_count,name,color,4,default,generic

但是我想要得到:

4,default,generic
forep尝试产生了类似的反应。 我希望了解我做错了什么。

4 个答案:

答案 0 :(得分:2)

您已使用值初始化数组,但您可能希望使用键初始化它:

static $car_specs = array(
    "wheel_count" => null, 
    "name" => null, 
    "color" => null
);

答案 1 :(得分:1)

由于您已经拥有key个值的数组,为什么不为每个密钥创建相应的values数组并使用array_combine()

class Cars {
    static $car_specs;

    static function set_car_detail() {
        $keys = array("wheel_count", "name", "color");
        $values = array(4, "default", "generic");

        self::$car_specs = array_combine($keys, $values);
    }

    static function get_car_detail() {
        return self::$car_specs;
    }
}

Cars::set_car_detail();
echo implode(',', Cars::get_car_detail());

答案 2 :(得分:1)

您发布的代码根本不是一个类。它只是一堆具有时髦名称的全局函数和变量。尽量避免使用静态属性和方法,因为它们不是OOP。还要尽量避免使用公共属性和getter / setter,因为它们只是伪装的程序编程。

Car类的骨架可能如下所示:

class Car {
    private $wheel_count;
    private $name;
    private $color;

    public function __construct($wheel_count, $name, $color)
    {
        $this->wheel_count = $wheel_count;
        $this->name = $name;
        $this->color = $color;
    }

    public function paint($new_color)
    {
        $this->color = $new_color;
    }

    public function describe()
    {
        return sprintf('%d wheels, %s %s', $this->wheel_count, $this->color, $this->name);
    }
}

对象属性是私有的。封装是OOP的关键概念之一。它们在构造函数中设置。构造函数的作用是初始化对象,使其准备好工作。确保构造函数初始化所有对象的属性,并且它不执行任何其他操作(在构造函数中没有工作。)

在类中创建对您的类有意义的操作的方法。例如,汽车的车轮数量永远不会改变,没有必要编写一种方法来设置不同数量的车轮。但是汽车的颜色有时会改变,而paint()方法会处理它。

避免编写“getters”(即除了返回属性值之外什么都不做的方法)。它们表明某些属于该类的代码是在类之外的某个地方编写的(很多时候它在这里和那里都是重复的,只有很少或没有变化)。只要可能和适当,编写一个使用对象属性生成有用值的方法(而不是编写getter以便在其他地方计算有用值)。

这是使用下面描述的Car类的方法:

$car1 = new Car(4, 'Mazda', 'red');
$car2 = new Car(8, 'big truck', 'blue');

echo($car1->describe());
# 4 wheels, red Mazda

$car1->paint('green');
echo($car1->describe());
# 4 wheels, green Mazda

答案 3 :(得分:0)

具有专门针对该

的不言自明的功能
   static function get_car_detail() {
      return array_values(self::$car_specs);
   }