2012-07-12 126 views
2

这是我从未完全确定或从未找到确切答案的内容。PHP,将参数传递给对象方法或使用实例变量

可以说我有一个用户类,里面有一个register()方法,我不确定哪种方式最好实现这个方法。

在我register.php页我应该有

$user->register($_POST['firstName'], $_POST['lastName'], $_POST['username'], etc..); 

,然后在register()方法不打扰设置对象的属性,只是使用的方法或签名提供的变量应该我做

$user->register(); 

然后在寄存器功能做一些像

$this->firstName = $_POST['firstName']; 
$this->lastName = $_POST['lastName']; 
etc... 

提前致谢。

回答

0

考虑到$_POST是在全局范围内定义的,使用后一种方法(不传入参数并从函数中设置它)会更有意义。但是请注意,这仅适用于在全局范围(在这种情况下)中声明$_POST的情况,并且在从外部PHP模块传入该类时,您将失去灵活性。

+0

好凉爽感谢回复。我一直在使用最后一种方法,所以看起来像我不必更改任何代码。 – David 2012-07-12 18:07:20

2

如果注册方法绑定到对象(实例,而不是类),我会让它使用必须事先设置的内部属性。所以,你实例化一个用户,设置属性,然后调用$ user-> register()。

$user = new User(); 
$user->firstName = 'name'; //$user->setFirstName('name') could also work 
$user->lastName = 'last name'; // for this to work, the properties have to be public 
$user->register(); 

用户A应该只能注册本身,而不是别的。

如果你使用带参数的方法,你基本上可以注册任何东西(不仅仅是一个用户)。另外,如果注册意味着将参数写入数据库,则只使用用户对象内部的方法更加健壮。如果您决定更改注册机制(如果您需要来自用户对象的其他信息),则只需修改用户类。

编辑:

现在,我已经想过这个问题有点多,我想我会再拍类注册用户,则需将整个用户对象,并添加一个角色或任何与保存到数据库。这样,用户对象更简单一些,不需要知道它是如何注册或注销的,如果注册机制改变,用户可以保持不变。

编辑2:

从不是一个真正的二传手的方法设置对象属性时要小心(就像您在寄存器($ FNAME,LNAME $ ......))。同样的方法给我带来了麻烦,因为“某些东西”会因为没有明显原因而改变我的对象,并且我无法在代码中的任何地方找到setter或直接调用属性。

+0

当你说实例化用户时,设置属性,然后调用$ user-> register()函数,你用什么方法设置属性?在运行register()方法之前,为每个属性使用setter方法? – David 2012-07-12 18:15:57

+0

您不必使用setter,您可以直接访问该属性(如果它是公开的)。尽管一个setter可以给你一种验证输入的方法,但如果姓氏是空的或类似的东西,你可以抛出一个异常。 我在帖子中添加了代码,因为在评论中做到这一点非常棘手。 – Pinetree 2012-07-12 18:17:17

1

实施完全取决于您。你可以做任何一种方式。这里有一个例子:

class User{ 

    protected $_firstName = null; 

    protected $_lastName = null; 


    public function register(array $params = array()){ 
     if(!empty($params)){ 
      $this->setParams($params); 
     } 
     // Do more processing here... 
    } 


    public function setParams($params){ 
     // Set each of the users attributes. 
    } 


    public function setFirstName($name = null){ 
     if($name !== null){ 
      $this->_firstName = $name; 
      return true; 
     } 
     return false; 
    } 


    public function getFirstName(){ 
     return $this->_firstName; 
    } 


    // Same getter and setter methods for other attributes... 

} 

这样你就可以在用户属性为$_POST,或者您可以通过调用$user->setFirstName()$user->setLastName()等分别做传递一个数组...用于快速