我正在学习基本的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-&gt; get('usesecure'))”类JRoute的函数调用?如果是的话,它的功能是什么?我检查了joomla API(http://api.joomla.org/Joomla-Platform/Application/JRouter.html),但仍然无能为力。拜托,非常感谢任何帮助。
答案 0 :(得分:3)
提到的:: scope resolution operator,它允许访问静态,常量和重写属性。所以,在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]
不同,它不是静态调用的。 e.g。
$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);
答案 1 :(得分:0)
双冒号称为scope resolution operator,用于调用静态类方法或属性。 Underscore并不意味着什么,但_()
通常用于字符串翻译。
答案 2 :(得分:0)
双冒号与OOP(面向对象编程)一起使用。如果你是一般的编程新手,那么对象在重用代码时非常有用,一旦你对编程感觉更舒服就绝对值得研究......那就是你没有经验。希望有所帮助!
-Frank