1

我正在学习基本的 PHP,试图阅读并获得对 JOOMLA 核心文件的一些基本了解,而我遇到了很多像“::_”这样的运算符,我不明白。

我做了一些谷歌研究,有很多关于双冒号 (::) 的解释,但几乎没有关于“::_”的内容,包含此运算符的文件之一是 joomla-site-root/mod_login/tmpl/default .php,该行是

<form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="login-form">

那么这是什么意思?“JRoute::_('index.php', true, $params->get('usesecure'))”是JRoute类的函数调用吗?如果是,它是什么功能?我检查了 joomla API(http://api.joomla.org/Joomla-Platform/Application/JRouter.html),但仍然一无所知。请,任何帮助将不胜感激。

4

3 回答 3

4

前面提到的 :: 是范围解析操作符,它允许访问静态、常量和覆盖的属性。因此,在 Joomla 的情况和您的问题中,它正在访问一个名为“_”的类静态方法。

下划线“_”实际上是方法的名称。

在 Joomla 中,您会发现很多类都实现了下划线方法,例如默认的文本翻译实用程序:

echo JText::_('COM_MYCOMPONENT_SORT_BTN_LABEL');  // This is the most commonly used one.

只有少数仍然使用静态函数。JHTML是一个[JHTML::_][2]类似于类加载器的示例,它根据传入的第一个参数加载帮助文件$key

echo JHtml::_('behavior.tooltip');
echo JHtml::_('behavior.formvalidation');
echo JHtml::_('sliders.panel', JText::_($fieldset->label), $fieldset->name);
echo JHtml::_('link', JHelp::createUrl('JHELP_GLOSSARY'), JText::_('COM_ADMIN_GLOSSARY'), array('target' => 'helpFrame'));

JLanguage是一个带有下划线方法的 Joomla 类,您可能会看到它在各处使用但与 不同JRoute[JText][4]或者[JHTML][5]它不是静态调用的。例如

$lang = JLanguage::getInstance($toUser->getParam('admin_language', $default_language), $debug);
$lang->load('com_messages', JPATH_ADMINISTRATOR);
$subject = sprintf ($lang->_('COM_MESSAGES_NEW_MESSAGE_ARRIVED'), $sitename);
于 2013-09-12T10:19:26.073 回答
0

双冒号称为作用域解析运算符,用于调用静态类方法或属性。下划线没有任何意义,但_()通常用于字符串翻译。

于 2013-09-12T02:20:33.373 回答
0

双冒号与 OOP(面向对象编程)一起使用。如果您是一般编程的新手,那么对象对于重用代码非常有用,并且一旦您对一般编程更加熟悉......那是如果您还没有经验的话,绝对值得研究。希望有帮助!

-坦率

于 2013-09-12T02:23:43.283 回答