[英]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.