这个功能应该是公共的还是私人的?

时间:2011-06-14 12:32:57

标签: php function codeigniter

我通过在规则中使用回调来验证CodeIgniter中表单验证中的数据库中的电子邮件。例如

$this -> form_validation -> set_rules( 'email', 'Email address', 'trim|valid_email|callback_email_exists' );

email_exists功能是:

public function email_exists($email)
    {
        $this -> load -> model('account_model');
        $exists = $this -> account_model -> email_registered( $email );
        if ( $exists == true )
        {
            $this -> form_validation -> set_message ( 'email_exists', 'Email already exists.');
            return false;
        }
        return true;        
    }

工作正常。但是,上述email_exists函数不应该是私有函数而不是公共函数吗? 我尝试将其设为私有private function _email_exists($email),然后通过callback__email_exists

回复它

然而我收到错误:

Fatal error: Call to private method Account::_email_exists() from context 'CI_Form_validation' in ....(line number)

有人可以告诉我出了什么问题吗?

3 个答案:

答案 0 :(得分:0)

如果您需要从对象外部(无论是回调还是直接)调用它,它应该是公共的

答案 1 :(得分:0)

你可以这样做:

$rules['field'] = 'callback__email_exists';
$this->validation->set_rules($rules);

function _email_exists() {
  // Normal callback function rules
} 

确保将两个下划线附加到回调而不是一个。

不要忘记将下划线添加到邮件规则中:

$this->validation->set_message('_email_exists', 'The email already exists');

答案 2 :(得分:0)

您正在根据模型account_model验证电子邮件,因此这会使功能更加集中于私有边界。通过将此函数公开,您将无法实现任何重要的事情,而是可以使此函数成为现实

A PRIVATE FUNCTION TO CHECK EMAILS FOR MODEL account_model