通过方法设置属性

时间:2014-09-08 16:27:48

标签: php oop

我是OOP的新手。

我目前正致力于将数据添加到对象,然后将其提交到数据库。我创建了一个名为setData的方法来获取两个参数,然后将这些参数添加到对象中。

在课堂上,我用这个

public function setData($value1, $value2) {
    $this->$value1 = $value2;
}

在表单提交时,该函数用于存储数据

$sites = new AddWebsites;
$sites->setData('name', $name);
$sites->setData('page_rank', $pr);
$sites->setData('pa', $pa);
$sites->setData('da', $da);
$sites->setData('tf', $tf);
$sites->setData('cf', $cf);
$sites->setData('keywords', $keywords);
$sites->setData('notes', $notes);

这将输出以下数据

AddWebsites Object
(
[name] => asdf.com
[page_rank] => 5
[pa] => 15
[da] => 25
[tf] => 14
[cf] => 62
[keywords] => Array
    (
        [0] => kw1
        [1] => kw2
        [2] => kw3
        [3] => kw4
        [4] => kw5
    )

[notes] => asdf
)

我被告知这是错误的,会引发错误。

我想知道是否有更好的方法来实现这个目标,如果实际上是错误的,并且有更简单的方法可以做到这一点。

启用错误报告后,我没有遇到任何告诉我我在做什么是错误的事情。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

在纯OOP术语中它是错误的,因为您使用PHP(有些不同寻常)的能力通过setData方法向实例化对象添加任意属性。

你应该做的 - 实现封装和数据验证的目标 - 是这样的:

class AddWebsites {

 private $name;
 private $pageRank;
 // etc

 // Setters
 public function setName(value) {
    // you can put validation logic in here 
     this->name = value;
 }
  public function setPageRank(value) {
     // you can put validation logic in here  
     this->pageRank = value;
 }

// etc 

  // getters
 public function getName() {
     return this->name;
 }
  public function getPageRank() {
     return this->pageRank;
 }

}

这是使用" Getters"和#34;塞特斯"。

但是,您可以将您的成员公之于众,然后您就不需要获取此类内容

答案 1 :(得分:1)

我可以注意到的一件事是在函数参数中传递字段名称不是一个好主意。这背后的原因是,如果你错误地传递了错误的字段名称,那么php将为该对象创建另外一个字段。 因此,如果你有多个相同类的对象,那么有些将不会有该字段。这导致了不一致。

所以我觉得这不是正确的事情,因为你不想动态地创建类pbject的属性。

理想的方法是为每个字段设置不同的getter和setter函数,并且字段在范围内应该是私有的,这样您/开发人员就不会错误地创建新字段。