【问题标题】:calling a function within a class with a Joomla module使用 Joomla 模块在类中调用函数
【发布时间】:2013-02-26 21:22:40
【问题描述】:

我有一个用于模块开发的 Joomla 辅助类,我尝试调用的方法如下:

class modCamcloudReferralHelper
{
        /*
         * Sanitize email form
         */
        public function isInjected($str) {
            $inject = "/(\r|\t|%0A|%0D|%08|%09)+/i";
            return (preg_match($inject, $str) > 0);
        }

        public static function sendEmail() {


            $jinput = JFactory::getApplication()->input;

            $email = $jinput->post->get('email', '', 'STRING');


            //check email is fine
            if (isInjected($email)){ //never get into this code and it causes some sort of failure
                echo "blah";
            }

        }
}

很简单,对吧?但是这段代码只是给了我一个空白页,我看不到任何错误......任何地方。我可以将这段代码直接放入我的 sendEmail 函数中,它工作得很好:

        $inject = "/(\r|\t|%0A|%0D|%08|%09)+/i";
        if (preg_match($inject, $email) > 0){
            echo "This works";
        }

我之前构建的 Joomla 组件遇到了这个问题。由于某种原因,从同一类内部调用此函数不起作用。这一定是 Joomla 的事……否则我要疯了。有什么想法吗?

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    您应该使用对其容器的引用来调用该方法,即使它是本地的。

    所以这里正确的语法是:

    if (self::isInjected($email))
    

    来自另一个班级:

    modCamcloudReferralHelper::isInjected(
    

    这对助手有好处:只需确保将要调用的方法声明为静态方法

    public static function isInjected($str) {
    

    如果您在实例化类(视图、模板、模型)上调用方法,则应该使用

    $this->method()
    

    【讨论】:

    • 他需要将isInjected 声明为静态才能执行此操作,您可能希望将其添加到您的答案中:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2017-07-24
    • 2020-07-04
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多