Intereting Posts
Хранение файлов скриптов вне веб-корневого каталога В чем разница между :: (double colour) и -> (стрелкой) в PHP? Есть ли идиоматический способ получить потенциально неопределенный ключ из массива в PHP? Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в строке 114 Stubbing метод, вызываемый конструктором класса Передача переменных $ _GET (или $ _POST) с разбиением на страницы (SESSION не работает) Как получить дату (например, как 2013-06-02) в прошлом на основе входных чисел дней (например, как 230, 20 или 360 или сколько угодно дней) в PHP? настроить mime-типы windows azure websites php app Найти, если номер находится между двумя номерами в разных полях в базе данных MySQL Laravel – уничтожить существующие сеансы при входе в систему Какой подход кода позволит пользователям применять три необязательные переменные в PHP / MySQL? Возвращение переменной sql в PHP Как безопасно использовать ключ api pdo-> query () возвращает два из каждого результата? Как удалить zip-файл с помощью php

Почему шаблон может напрямую использовать это ключевое слово?

Я новичок на PHP; сегодня я вижу в Magento top.phtml некоторый код.

 <?php $_menu = $this->renderCategoriesMenuHtml(0,'level-top') ?> <?php if($_menu): ?> <div class="nav-container"> <ul id="nav"> <!--NEW HOME LINK --> <li class="home"><a href="<?php echo $this->getUrl('') ?>"><?php echo $this->__('Home') ?></a>"</li> <!--NEW HOME LINK --> <?php echo $_menu ?> </ul> </div> <?php endif ?> 

Я знаю, что $this – это сам class , он используется только в классе для ссылки на метод или свойство, в приведенном выше коде, нет класса, который был определен, почему он может напрямую использовать это ключевое слово? Что означает $this->__('Home') ?

Related of "Почему шаблон может напрямую использовать это ключевое слово?"

Поскольку вы отметили этот Mage_Catalog_Block_Navigation вас, вероятно, есть класс Mage_Catalog_Block_Navigation . По крайней мере, методы намекают на это. Теперь у меня нет никакой информации о Magento, но этот класс простирается от Mage_Core_Block_Template и в этом классе у вас есть метод fetchView , который в какой-то момент делает

 include $includeFilePath; 

Когда вы include код внутри метода, у вас есть доступ к $this во включенном коде файла, потому что он оценивается в области этого экземпляра:

Когда файл включен, код, который он содержит, наследует область изменения строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед. Однако все функции и классы, определенные во включенном файле, имеют глобальную область видимости.

Общий пример:

 class Template … public function render($templateFile) { include $templateFile; } public function ___($stringToTranslate) { // translates $stringToTranslate somehow } } 

Обратите внимание, что « $this is not the self of the class» является лишь частично правильным. self также является ключевым словом и php, но в то время как self действительно относится к классу, $this относится к экземпляру класса.

Объект определен! Этот шаблон используется как экземпляр блока. Это тот экземпляр, который упоминается в шаблоне. Быстрый способ определить класс, с которым вы сейчас работаете внутри шаблона, – использовать следующую строку кода в шаблоне:

 <?php echo get_class($this); ?> 

Кроме того, вы __ метод __ . Это перехватывает локальную систему Magento. Это означает, что вы могли бы написать:

 <?php echo $this->__('Hello') ?> 

В своем шаблоне используйте один и тот же файл шаблона во французском магазине и только для того, чтобы создавать текстовое сопоставление с английского языка на французский, вместо создания совершенно нового шаблона.

Потому что это шаблон для некоторого блочного класса. Шаблон блока (файл .phtml ) включен внутри Mage_Core_Block_Template класса fetchView() . Вы можете перейти к app/code/core/Mage/Core/Block/Template.php и посмотреть, как это делается. Вот почему $this доступно в .phtml . Вы можете больше узнать о блоке и шаблонах пурпурного цвета в этой статье Алана Шторма . Он немного устарел, но основные объясняются очень хорошо (imho).