繁体   English   中英

仅PHP数组返回值

[英]PHP array return values only

我已经开始研究PHP面向对象的编程。
一般而言,我对PHP的经验有限。

我有如下PHP代码:

“汽车”类别:

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

foreach尝试产生了类似的响应。 我想了解我做错了什么。

您已经用值初始化了数组,但是也许您想使用键来初始化它:

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

由于您已经有一个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());

您发布的代码根本不是一个类。 它只是一堆带有时髦名称的全局函数和变量。 尽量避免使用静态属性和方法,因为它们不是OOP。 也要尽量避免使用公共财产和吸气剂/吸气剂,因为它们只是变相的程序编程。

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()方法可以解决这个问题。

避免编写“获取器”(即除了返回属性值之外什么也不做的方法)。 它们是属于该类的某些代码写在该类之外的某个地方的标志(很多时候,该代码在此处,各处和任何地方重复,而且几乎没有更改或没有更改)。 只要有可能,就编写一种使用该对象的属性生成有用值的方法(与编写吸气剂以使该有用值在其他位置进行计算相反)。

这就是下面描述的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

有一个专门用于此目的的自我解释功能

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM