Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将属性从类传递到基类_Php_Oop_Properties - Fatal编程技术网

Php 将属性从类传递到基类

Php 将属性从类传递到基类,php,oop,properties,Php,Oop,Properties,在我的程序中,一个对象表示数据库中的一行,它具有所有相同的数据以及setter和getter等 每列的值都保存到对象中的属性中。例如: class Person extends Base { protected $name; protected $age; /* Setters & Getters */ } 在基类上,我有一个Save()方法,它将根据Person类的属性创建一个更新查询。我很难弄清楚如何将属性传递给基的Save()方法。我没有什么想法,但我对它们不太满意

在我的程序中,一个对象表示数据库中的一行,它具有所有相同的数据以及setter和getter等

每列的值都保存到对象中的属性中。例如:

class Person extends Base {
  protected $name;
  protected $age;

  /* Setters & Getters */
}
在基类上,我有一个Save()方法,它将根据Person类的属性创建一个更新查询。我很难弄清楚如何将属性传递给基的Save()方法。我没有什么想法,但我对它们不太满意

一,。 为所有属性添加前缀。像“db_u2;”:

  • 混乱的
  • 丑陋的
二,。 添加一个数组,该数组包含与数据库中的行相关的所有属性名称

protected $db_properties = array("id", "age");
protected $id;
protected $age;

Loop get_object_vars($this) and check if they are in the $db_properties array.
Or loop the $db_properties and get the properties.
  • 双重相同数据
三,。 假设所有属性始终与数据库中的行相关

Loop get_object_vars($this).
  • 无法为其他内容添加属性

还有别的办法吗

我不确定我是否理解这个问题,但你考虑过词典吗?

为什么需要将其传递回
Base
tho?当您实例化
Person
时,
Base
将成为其中的一部分。因此,如果
Base
定义了一个变量,那么
Person
也会有这个变量。

这不是一个答案,也许我用了一个不好的词。无论如何,问题是,当Save()方法从基继承并调用它时,它如何知道哪些属性与数据库行相关。例如,$name和$age是,但是如果我为类添加了与数据库中的行不相关的新属性,我不希望Save()函数尝试将它们添加到查询中。如果需要向函数传递更多选项,为什么不将数组作为参数传递,让save函数只将这些字段添加到查询中呢?这是多态性的好地方。我不知道是否有一个干净的方法来做你想做的事。当我不得不使用另一种程序语言实现类似的功能时,我只是将
save()
方法定义为虚拟的,然后在需要的地方重写它。OP使用的是PHP ORM的一部分吗?就像@Leron建议的那样,我会在
Base
中创建一个抽象方法,并在每个派生类中重写它。
Loop get_object_vars($this).