Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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_Function_Codeigniter - Fatal编程技术网

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

Php 这个功能应该是公共的还是私人的?,php,function,codeigniter,Php,Function,Codeigniter,我正在使用回调规则在CodeIgniter中的表单验证中验证数据库中的电子邮件。比如说 $this -> form_validation -> set_rules( 'email', 'Email address', 'trim|valid_email|callback_email_exists' ); 电子邮件功能是: public function email_exists($email) { $this -> load -> model('

我正在使用回调规则在CodeIgniter中的表单验证中验证数据库中的电子邮件。比如说

$this -> form_validation -> set_rules( 'email', 'Email address', 'trim|valid_email|callback_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;        
    }
它很好用。然而,上述
电子邮件功能不应该是私有功能而不是公共功能吗?
我尝试将其私有化,如
private function\u email\u exists($email)
并通过
callback\u email\u exists

但是我得到了一个错误:

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

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

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

您可以这样做:

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

function _email_exists() {
  // Normal callback function rules
} 
确保在回调中添加两个下划线,而不是一个

也不要忘记在消息规则中添加下划线:


$this->validation->设置消息(“电子邮件存在”,“电子邮件已经存在”)

您正在根据您的模型验证电子邮件,因此这使得功能更加集中于私有边界。通过公开此函数,您不会实现任何有意义的事情,相反,您可以使此函数保持原样

A PRIVATE FUNCTION TO CHECK EMAILS FOR MODEL account_model

为什么您认为它应该是私有的?在控制器内的CI和许多其他框架中,非私有函数可以作为URI中的方法进行访问。至少有一个原因
site.com/controller/email_存在
可能会导致不必要的副作用。@Tomalak Geret'kal,正是@Ross所说的。@Roman,这个函数在你的控制器中吗?@Ross,这个函数要求一个参数,因此,
site.com/controller/email\u存在
无法在没有错误的情况下触发函数实际上更改函数名会给您带来什么?